2016-04-09 6 views
1

私はcanonical URLのmod_rewriteに少し問題があります。これは私の現在のhtaccessです:htaccess canonical url

RewriteEngine On 
RewriteBase /reads 

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

私はこれらのURL書き換えしようとしている:、私のPHPの関数では website.com/reads/view.php?title=how-to-cook&chapter=9

website.com/reads/how-to-cook/9view.php?title=xyzは、そのタイトル内のすべてのチャプターを一覧表示されます呼び出し、&chapter=xxを追加します選択されたタイトルに対応するチャプターを読み込みます。

スクリプトは、これらのケースでは正常に動作します:

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

しかし、この1つは404エラー(タイトル後に最後のスラッシュを省略)を与える、エラーを修正する方法を教えてください、エラーが来るかもしれない説明本当にいただければ幸いです。

website.com/reads/good-recipes 

2番目の質問は、(ここでは、あまりにも貪欲されている場合私を許して)。私はターンするにはどうすればよい:

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

最初の行はあなたに2番目の質問に答えるのURLを変更し、これらの2行

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

を追加します。基本的に、ユーザーを新しいURLにリダイレクトし、2番目の引数が数値の場合にのみ動作します。 2行目は、あなたのルールにない新しい条件を定義しています。完全な書き換えルールセットは次のようになります

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