2011-02-28 63 views
1

我知道有關於Mod Rewrite的一百篇文章,教程和手冊,但我傾向於通過示例更好地學習,所以我所要求的只是一個快速漂亮的url轉換,會是我的方式(這樣我就可以剖析正是它這樣做,這樣我就可以把它應用到其他人)用於web應用程序的漂亮的URL

我有這個網址:http://www.example.com/single.php?id=1

現在,這將是巨大的,如果它可以遵循相同的約定堆棧溢出其中id = 1是頁面的實際標題。

我有一個PHP變量的標題,如果這有幫助嗎?

我將不勝感激,如果有人可以把上述分爲:(其中最後一位是動態的,取決於PHP變量)

這可能嗎?

+4

他們的文章,教程和手冊包含大量的例子,你知道 – 2011-02-28 12:40:32

+0

正如你可能注意到的,StackOverflow在URL中不包含'single'關鍵字,而是一個實際的問題ID。那麼,你究竟想要什麼網址? – 2011-02-28 12:43:16

+0

ok溝單,只是id號/標題將是偉大的! – benhowdle89 2011-02-28 12:47:23

回答

3

所以實際上有文章ID並在URL的稱號,但他們只會使用post ID。標題是不是很適合,因爲有可能是重複的帖子(標題相同,不同的ID),標題的變化,等等。對於這個問題的網址:

/questions/5142095/pretty-urls-for-web-application 

要解決此:

/single.php?id=5142095 

重寫規則將是:

RewriteRule ^questions/([0-9]*)/(.*)$ /single.php?id=$1 

這看起來對什麼是URI的開始(域)之後^,字questions,數字的任何長度`[0

這看起來爲:

  • ^的URI
  • 開始時的字questions
  • 斜線/
  • 號的可變長度[0-9]*(如1,123,1234等)
  • a斜槓/
  • 任何l任何字符.*的ength(即,問題的標題)
  • $的URI

當字符匹配的端部(如[0-9] *或*)是在括號中,mod_rewrite的放將結果匹配到數字美元變量。在上面的規則中,[0-9]*匹配任何數字(以及任意長度的數字)並將其放入$1。第二場比賽.*匹配任何字符的任何長度,並將比賽放入$2

您的應用程序將收到規則右側的URI,並將美元變量替換爲匹配項。

+0

感謝Adam,我用$ 1做了什麼? – benhowdle89 2011-02-28 12:56:07

+0

我已經添加了相當多的問題來解釋這一切 – 2011-02-28 15:10:15

+0

謝謝,這是一個很好的解釋......真的幫我把頭繞在它周圍! – benhowdle89 2011-02-28 19:26:12

1

你說得對對國防部重寫文章的數量 - 我個人不喜歡添加額外的規則,所有的時間,然後擔心,如果該規則將被抓到......

爲此最後,我寧願簡單地將該批次傳遞給根索引文件,然後讓服務器端決定如何處理它。

Have a look at this.

+0

偉大的鏈接,偉大的網站! – benhowdle89 2011-02-28 12:45:43

0

你必須使用Apache的國防部重寫,這裏有一個例子:

<Directory /www/yoursite/> 
      RewriteEngine On 
      RewriteRule ^single/?(.*)?/?$ article.php?id=$1 [L] 
    </Directory> 

編輯:這是對整數標識符添加到您的重寫,是個好主意:

   RewriteRule ^single/([0-9]+)/?(.*)?/?$ article.php?id=$1&text=$2 [L] 
1

不像其他人,這個答案將給你的解決方案不是針對特定的問題,而是針對整個問題。僅僅因爲它基於真實的生活經驗,而不是光禿禿的理論。

This answer包含您需要的所有內容,包括舊式網址的搜索引擎優化重定向以及改變舊腳本以使其像往常一樣運行的代碼。

您唯一需要做的就是更改您網站上的鏈接代碼。我希望沒什麼大不了的。