2011-09-25 4 views
6

に%2Fと一致しません:は、私が(.htaccessファイルで)このような何かを書き換え規則のセットを持っているのmod_rewrite

RewriteRule ^list/vendor/(.*)$ list.php?vendor=$1 
RewriteRule ^list/product/(.*)$ list.php?product=$1 
RewriteRule ^list/(.*)$ list.php?search=$1 

(私は最初の二つはしかし、私の質問に関連しているとは思いません) 。

私はmyserver.com/list/foo%2Cbarあるいはmyserver.com/list/foo/barに入力すると、私は私が期待する結果を得る:list.phpはfoo,bar$_GET['search']foo/barと呼ばれています。

しかし、myserver.com/list/foo%2Fbarと入力すると、ルールが一致しないようです!代わりに404エラーが表示されます。ここで何ができるの? Apache 2.2.14(重要な場合)

(私はFirefoxとChromeで同じ結果を試しましたが、もちろんブラウザが動作する可能性があります)。

+0

この場合、Apacheは自分の.htaccessファイルを見ていないことがありますか? – LHMathies

+0

エラーログに(情報レベルで)が見つかりました: '%2f(エンコードされた '/')がURIに見つかりました。戻る404' – cweiske

答えて

14

バー、私はそれを見つけました... ApacheのオプションAllowEncodedSlashesは、ディレクトリごとまたは.htaccessから設定できず、デフォルトではオフです。

私の仮想サーバーでホスティングしてくれる人を取得できない場合には、回避策を構築してください。

+0

あなたは何もしたくない、または変更が不可能なときサーバー構成では、URLを作成する前にすべての '/'文字を '-'で置き換えることができます。これは '%xx'文字としてエンコードされません。元の文字列が必要なときは、単に ' - 'を '/'に置き換えてください。 – LEDfan

+0

私はちょうどmod_rewrite URLのパラメータとしてURLを渡そうとしているのと全く同じ問題に遭遇しました。私の解決策は、私が渡そうとしているURLをurlencode倍にして、受信側でそれをデコードすることでした。 JavaScriptとPHPを使用しているので、JavaScriptの最後では 'encodeURIComponent(encodeURIComponent(urlToBePassed)) 'を使用して、実際にパラメータとして渡されるものは' http://example.com/url/http%253A%252F%'です252FsomeDir%252FsomeImage.png'。ちょっと複雑ですが、うまくいくようです。 –

関連する問題