2016-04-09 123 views
1

我對mod_rewrite for canonical url有點麻煩。這是我目前的htaccess:htaccess規範網址

RewriteEngine On 
RewriteBase /reads 

RewriteRule ^search/([^/]*)/?$ search.php?q=$1 [L] 
RewriteRule ^([^/]*)/([^/]*)/?$ view.php?title=$1&chapter=$2 [L] 

我試圖重寫這些網址: website.com/reads/how-to-cook/9website.com/reads/view.php?title=how-to-cook&chapter=9

在我的PHP函數,調用view.php?title=xyz將列出該標題的所有章節,增加&chapter=xx將加載與選定標題相對應的章節。

腳本在這些情況下正常工作:

website.com/reads/how-to-cook/9 
website.com/reads/economy-blah/5/ 
website.com/reads/good-recipes/ 

但這一次給出了404錯誤(省略了冠軍後,最後的斜線),請告訴我如何修正這個錯誤,說明其中的錯誤可能來臨從將會非常感激:

website.com/reads/good-recipes 

第二個問題(請原諒我,如果這裏太貪婪)。如何打開:

website.com/reads/how-to-cook/9 
website.com/reads/economy-blah/5/ 

website.com/reads/how-to-cook/chapter-9 
website.com/reads/economy-blah/chapter-5/ 

使用mod_rewrite。 謝謝!

回答

0

添加這兩條線

RewriteRule ^([^/]*)/([0-9]+)/?$ http://website.com/reads/$1/chapter-$2 [L,R=301] 
RewriteRule ^([^/]*)?$ view.php?title=$1 [NC,L] 

第一線的變化,回答你的第二個問題的URL。本質上,它將用戶重定向到新的url,並且僅在第二個參數是數字時才起作用。第二行定義了規則中缺少的新條件。完整的重寫規則集將如下所示

RewriteEngine On 
RewriteBase /reads 

RewriteRule ^([^/]*)/([0-9]+)/?$ http://website.com/reads/$1/chapter-$2 [L,R=301] 

RewriteRule ^search/([^/]*)/?$ search.php?q=$1 [L] 
RewriteRule ^([^/]*)?$ view.php?title=$1 [NC,L] 
RewriteRule ^([^/]*)/([^/]*)/?$ view.php?title=$1&chapter=$2 [L] 
+0

非常感謝。這真的有幫助。 – user1868297