2016-07-22 12 views
0

リダイレクトする必要のある古いURLがいくつかありますが、残念ながら一部にスペースが含まれています。 redirect.phpスクリプトにリダイレクトしますが、何らかの理由でURLにスペースまたは%20が含まれている場合は、リダイレクト後のURLにこの%20が無限回繰り返されます。これは、httpサブドメインまたはローカルで正しく動作するサーバーをHTTPSに切り替えたときにのみ発生します。.htaccessリダイレクトには、URLにHTTPSのスペースが含まれている場合、複数の%20が表示されます

私のルールは次のとおりです。

RewriteRule ^/?(gallery\.php)(.*) /redirect.php$2 [R,L]

これが正しく動作:

gallery.php?place=name - >redirect.php?place=name

しかし、URLにスペースが含まれる場合、この問題が発生した:

gallery.php?place=long%20name - >

redirect.php?place=long%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name

私は[B][NE]フラグが、ノー成功を追加してみました。私が行方不明のものはありますか?

更新1: htaccessの他のルールを除外するために、私は新しい例を作成しました。

RewriteEngine On 
RewriteRule ^/?(index\.php)(.*) /$2 [NE,R,L] 

すべてです:私は空のディレクトリ/test/、内部に含まれている空のファイル/test/index.php/test/.htaccessファイルは、あるを持っています。それでも動作は異常です。例: /test/index.php?a=xyは期待通りに動作しますが、/test/index.php?a=x%20yは%20の記号を繰り返します。

+0

興味深いことに、うまくいくはずです。それは私のために、あなたの正確なコードで、SSLを使用して動作します。 .htaccessに他のリライト/リダイレクトがありますか?そうであれば、あなたの質問に全部を投稿すれば、いくらかの光を放つかもしれません。 – Vrac

+0

@Vrac私は質問を更新し、ライブの例を追加しました – Ziki

+0

あなたはこのサーバーを制御しますか? httpd.confに 'LogLevel alert rewrite:trace6'を設定し、Apacheエラーログを出力します。 – Vrac

答えて

0

私は最終的に.htaccessの規則を並べ替えることで問題を回避することができました。だから、私はHTTPからリダイレクトスクリプトをHTTPにリダイレクトします。このスクリプトは、スペースなしですでにSSL上にある正しい新しいURLを解決し、そこでスクリプトがリダイレクトされます。 Fortunatellyすべての古いURLはHTTP上にあるので十分ですが、SSLでこのパラメータをリダイレクトする必要はありません。

でURLをリダイレクトすると、[NE]フラグが役立ちます。これにより、パーセント記号を新しいURLにさらにエンコードすることができなくなります。

関連する問題