2016-05-02 16 views
2

私は私のウェブサイトexample.com/foo.phpにこのURLを持っていたし、私は私のhtaccessでこれを行うことにより、example.com/fooにそれを変更:単純な301のリダイレクトは私のhtaccessに無限ループを作りますか?

RewriteRule ^foo$ foo.php [NC,L] 

、それが正常に動作します。しかし、古いURLから新しいURLに301リダイレクトしたいと思います。だから私はhtaccessにこの行を追加しました:

RewriteRule ^foo.php$ http://example.com/foo [L,NC,R=301] 

そして、私はリダイレクトの無限ループを...どのように修正するには?

答えて

0

あなたが使用してループのエラーを回避することができTHE_REQUEST変数:あなたはそれがshouldn順序を変更した場合

RewriteCond %{THE_REQUEST} /foo\.php [NC] 
RewriteRule ^foo\.php$ http://example.com/foo [L,R=301] 
RewriteRule ^foo$ foo.php [NC,L] 

それとも、Apacheの2.4上にある場合、あなたはENDフラグ

RewriteRule ^foo\.php$ http://example.com/foo [L,R=301] 
RewriteRule ^foo$ foo.php [NC,END] 
+2

ENDタグは私の問題を解決しました、ありがとう!それが何をしているのかを説明するためのケア –

+1

ENDフラグは、リウォッチング処理を終了します。そうでなければENDを指定しないと、ターゲットパスfoo.phpは最初のルールのパターンと再び一致し、無限の内部リダイレクトを作成します。 – starkeen

0

を使用することができます」 tループ作業。ベローズはうまく動作します:

RewriteEngine on 
RewriteRule ^foo.php$ http://example.com/foo [L,NC,R=301] 
RewriteRule ^foo$ foo.php [NC,L]