2009-10-05 105 views
0

我已發佈類似問題here。然而,這更多的是關於如何做的建議。現在我知道該怎麼做了,我正在尋找一些關於如何去做的幫助!使用PHP解析URL

基本上我有一個幾乎100%動態的網站。所有的網站鏈接都是使用PHP生成的,所有頁面都由PHP包含/代碼組成。我試圖通過改進網址來改善網站的搜索引擎優化(正如其他問題所述),我正在努力一點。

我正在使用mod_rewrite的重寫好的網址到服務器上的醜陋的網址。所以我需要的是現在將醜陋的網址(從網頁中的php代碼生成)轉換爲更好的網址。

這裏有我需要解析(這是在其他問題藏漢)網址:

/index.php?m=ModuleType 
/index.php?m=ModuleType&categoryID=id 
/index.php?m=ModuleType&categoryID=id&productID=id 
/index.php?page=PageType 
/index.php?page=PageType&detail=yes 

這裏是我想上面的網址來解析一下:

/ModuleType 
/ModuleType/CategoryName 
/ModuleType/CategoryName/ProductName 
/PageType 
/PageType/Detail 

有是Gumbo發佈的另一個問題的例子,但是我覺得它有點混亂,不清楚它究竟在做什麼。

有人可以幫我解決這個問題嗎?

在此先感謝。

回答

2

我想我看到你在做什麼......你已經完成了所有的URL重寫,但是你的頁面之間的所有鏈接都使用舊的URL語法。

我可以看到這個的唯一方法是做一些正則表達式搜索和替換鏈接,以便他們使用新的語法。如果所有鏈接都是動態生成的,這將會更復雜一些,但希望這樣做不會太多。

現在看不到您的鏈接是如何生成的,很難說如何更改代碼。我想它的工作原理是這樣的,雖然:

<?php echo "<a href='/index.php?m=$ModuleType&categoryID=$id'>"; ?> 

所以,你會更改爲:

<?php echo "<a href='$ModuleType/$id'>"; ?> 

很抱歉,如果我在語法上所犯的錯誤,就在我的頭頂。 ..

+0

是的,這正是我的問題!假設我想要遵循類似的方法,在頁面上添加額外的問題標題(用於搜索引擎優化目的)。我會怎麼做呢? – James 2009-10-05 13:32:38

+0

URL中的問題標題剛剛添加,但未被SO使用。如果您在URL中重命名問題,它仍然有效:http://stackoverflow.com/questions/1518896/parsing-urls-using-java – Skilldrick 2009-10-05 13:59:09

+0

因此,只要您正確編寫重寫規則,就可以追加任何您想要的內容你的鏈接,它仍然會工作。 – Skilldrick 2009-10-05 14:01:17

1

除非我誤解了你的問題,你不解析「醜陋」的URL,你的PHP腳本與他們一起被調用,所以你$_GET[]你的參數(m,categoryID,productID)和你結合起來使你的漂亮的URL ,這應該不會太難(只需要一點邏輯來查看是否有一個參數存在並將字符串連接起來)。

+0

現在網頁上的所有鏈接都是參數化的,即index.php?page = home,我想要做的就是將它們轉換爲更好的URL。 – James 2009-10-05 09:15:48

1

您將需要一個前端控制器,它會將URL分發到正確的頁面。

  1. Apache將使用.htaccess中的規則重寫URL,以便將任何寫入的內容重定向到index.php?q =。例如,輸入http://example.com/i/am/here將導致對index.php的調用?q =/i/am/here
  2. Index.php將解析$ _GET [「q」]的路徑並決定要執行的操作。例如,它可能包含一個頁面,或轉到數據庫,查找路徑,獲取適當的內容並將其打印出來

如果您想要一個.htaccess的工作示例,重定向與q =路徑到index.php)看一看如何Drupal的做的:?

http://cvs.drupal.org/viewvc.py/drupal/drupal/.htaccess?revision=1.104

+0

如果搜索引擎將這些頁面作爲http://example.com/i/am/here這裏拿起,或者他們仍然會看到index.php?q =/i/am/here? – James 2009-10-05 10:24:53

+0

網絡蜘蛛將獲得您網站的鏈接,這些鏈接位於「a href ='...'」鏈接中。這兩種導航方法都將可用,並且取決於您在頁面中放置的內容。例如,如果在菜單中鏈接頁面,如「/我/我/這裏」,那麼搜索引擎會選擇。如果您使用&q =鏈接,那麼搜索引擎將獲得該鏈接。如果你把它們混合在一起,那麼搜索引擎會選擇兩個,重複結果。 – Palantir 2009-10-05 12:28:44

1

由於真知晶球中寫道,這是使用mod_rewrite和做的.htaccess。要在.htaccess中獲得正確的重寫條件,您可能需要查看Mod重寫生成器(例如http://www.generateit.net/mod-rewrite/)。使它更容易。

+0

嗨,感謝您的發電機,將派上用場的鏈接!然而,mod_rewrite規則並不是我所指的,頁面上的網站鏈接目前是動態生成的,所以我現在需要解析它們並用更好的鏈接替換它們。 – James 2009-10-05 10:09:10

+0

「動態」是指像index.php?m = value1或index.php?m = value2?如果你有變量的名字(例如「m」),你可以把它放在.htaccess中,並且有一個很好的重寫規則。你甚至可以使用動態變量(例如m,page,bla,foo等),但是這需要更復雜的重寫規則。這不能與我發佈的發電機完成。這是一個很好的備忘單:http://www.addedbytes.com/apache/mod_rewrite-cheat-sheet/ – svenkubiak 2009-10-05 10:39:19

+0

我的意思是,有包括文件,即header.php/footer.php等鏈接到各種在網站上的頁面。他們目前正在通過查找數據庫並計算要添加的參數(index.php?page = home)來生成。然而,因爲我現在試圖擺脫這些類型的URL,我需要更新我的鏈接來動態創建更好的網址。我知道我需要重寫規則,但是,我需要能夠解析這些舊的生成的url並將其替換爲好的。 – James 2009-10-05 10:50:25