2011-08-24 201 views
0

我目前使用的Apache 2.2漂亮的URL和搜索引擎優化友好的網址?

我可以做簡單的事情,像

RewriteRule ^/news$ /page/news.php [L] 
RewriteRule ^/news/(.*)$ /page/news.php?id=$1 [L] 

,但如果我要發送2個參數是這樣

http://www.example.com/link/param1/param1_value/param2/param2_value

什麼最後,我想也知道實施SEO友好的URL,如stackoverflow

雖然我可以接觸到與URL的網頁像

http://www.example.com/doc_no/

只是裝飾該URL與

http://www.example.com/doc_no/this-is-the-article

給我一些建議與示例代碼片段。

回答

1

我知道PHP symfony框架允許你這樣做。

它是如何工作: 在Apache的配置,使用mod_rewrite對所有傳入resquest重定向到一個單一入口點(symfony的這個被稱爲「前端控制器」)

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^(.*)$ index.php [QSA,L] 
</IfModule> 

在這方面的控制器,你將創建一個「Request」對象,該對象保存URL提供的所有信息。

例如,你可以說後的第一件事了「/」是PHP文件的名字來稱呼和其他一切都是參數值,以便: http://example.com/file/id/2將調用file.php使用id = 2

要做到這一點,只需使用一些reg exp並仔細設計你的「請求」類。對於上面的例子,「Request」類應提供getRequestedAction()和getParameter(字符串參數)方法。當「Request」對象完全填充以調用正確的文件/動作/方法時,將使用getRequestedAction()方法。

如果您選擇填充的URL都REG EXP和_GET數組的解析請求對象的參數數組,你可能會得到的地步: http://example.com/file/id/2相同http://example.com/file?id=2 (無一不可以工作)

您可以選擇忽略擴展(http://example.com/file.html是一樣的http://example.com/file),還是不行。

最後,對於一些網址,你可以選擇忽略最後的「/」之後去一切。因此:http://example.com/question/3/where-is-khadafihttp://example.com/question/3/is-linux-better-than-windows相同

在不同的file.php中,只需使用$ request-> getParameter('id')來獲取「id」參數的值,而不是使用_GET或_POST陣列。

整點是要

  1. 重定向所有傳入流量到一個單一的「前端控制器」
  2. 在該文件中,創建一個包含運行站點所需的所有信息「請求」對象
  3. 調用正確的行動基於包含在該「請求」的信息(PHP文件)對象
  4. 的行動裏面,用這個請求對象來獲取包含在URL中的參數

希望這會有所幫助

+0

有沒有人有這方面的一個例子嗎?我想實現這種類型的配置,但是在代碼實際上在「file.php」文件中看起來有點遺憾。 –

0

注意Google have stated他們更喜歡news.php?id=$1而不是news/$1,因爲它們更容易檢測變量。

http://www.example.com/link/param1/param1_value/param2/param2_value 

你總是可以將二者結合起來,如果一個參數是通用就像一個類別:

http://www.example.com/param1/?id=param2_value 
增加變量的數目時,剛剛在看你的第一個例子是一個有點混亂,這是比較中肯

如果需要多個參數並且不是臨時搜索,應該重新評估設計。

+0

實際上谷歌希望非必需參數的變量。如果帕拉姆定義您檢索(而不是服用點一樣,不改變頁面改變會話ID)的內容,那麼友好的URL仍然是更好的 –

+0

@boomhauer見我添加的鏈接:「雖然我們能夠處理這個URL正確,我們仍然因爲它是難以維持的,需要儘快作爲一個新的參數被添加到原來的動態URL更新使用此重寫阻止你。」 –

+0

耶真的...但隨後他們的索引對待友好的URL比非好多了,所以我想證明是.. :) –

相關問題