0

クエリ文字列引数の一部としてバックスラッシュを渡そうとしています。

このプロジェクトでは、非常に単純なurl_rewriting方法を使用します。

//.Htaccess
RewriteEngine On

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

RewriteRule .* index.php?arguments=$0 [NC,L]

次に、値を/$_GET['arguments']で区切って受け取る

例: blog/post/2/ は「post/2/」で埋め$_GET['arguments']られます

問題は、 test%5Cabc ( test\abc用にエンコードされた URL ) のようなものを渡そうとすると、リクエストが引数として渡す代わりに 404 エラーを返すことです。

修正方法がわかりません。前もって感謝します。

4

2 に答える 2

1

404 エラーが発生する理由は、デフォルトで Apache がAllowEncodedSlashesをオフにしており、その動作がバックスラッシュを含む要求を 404 にするためです。これは、オンにするとセキュリティ上の危険が生じる可能性があるためです。Apache 2.2.18 以降では、これを少し安全にする NoDecode 設定があり、あなたの場合にうまく機能します。

とにかく、ローカルでオンにしてみました。実際、このスクリプトは次のとおりです。

<?php var_dump($_REQUEST); ?>

次のようなURLを処理できます

http://localhost/this\is\a\test

と出力

array(1) { ["arguments"]=> string(14) "this\is\a\test" } 

ただし、それ(または私のブラウザ)は、エンコードされたバックスラッシュに問題があり、それらを通常のバックスラッシュに変換しているようです-おそらくそれは問題ではありません。rewriterule で B フラグを有効にすると、エンコードされていないバックスラッシュがエンコードされたバックスラッシュに変換されます。

于 2015-02-11T01:06:09.803 に答える
0

私はあなたが正しいことを願っています、これを使ってみてください:

'/file.php?id=$value'//this utilise that backslash and then pass the id to the `$_Get[]` Function somewhere in the file.php.
于 2015-02-11T00:24:41.947 に答える