2017-06-19 14 views
1

私は自分のサイトで美しいURLを使用しようとしています。私は、次の.htaccessのコードは正常に動作します.htaccess redirect - [R]フラグなしの無限ループ

をexample.com/?q=page-titleする

example.com/page-title/をリダイレクトしたいが、それは理由[RのHTTPリダイレクトありません]フラグ:

RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

RewriteRule ^(.+)/*$ https://www.example.com/?q=$1 [L,R] 

はもちろん、私は内部リダイレクトをしたいが、私は[R]フラグを削除するとき、それはリダイレクトループに入ります。

  1. なぜ[R]フラグはループしないのですか?
  2. [R]フラグなしのループを回避するにはどうすればよいですか?
+1

変更これまであなたのルール:: 'のRewriteRule ^(+)$/Q = $ 1 [L、QSA]'とあなたのキャッシュ完全にクリア?

あなただけのルールを使用することができます。 – anubhava

+1

ええ、私は問題がURL全体を含んでいると考えました。それがなければ、Apacheはループを検出して無効にすることはできません。あなたと私が正しいものとしてそれを選ぶように答えを投稿しても構いません。 –

答えて

1

問題は、あなたのターゲットにhttp://があるようです。 Rフラグがなくても、Apacheがhttp://またはhttps://をターゲットとする完全なURLを見る場合、R=302で完全リダイレクトを実行します。

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(.+)$ /?q=$1 [L,QSA]