0

ファイルが要求されたときにアンパサンドをシステムにさらに渡すことができるように、URL でアンパサンドを使用したくないだけです。問題は、Apache の扱いが異なることです。方法がわからない

要求されたファイルをすでに index.php?url=$1 に書き換えているので、それが何であるかを確認できますが、そこにアンパサンドが含まれていると、それを超えて続行できません!

アンパサンドをエスケープするか、それを 16 進数 (%26) に変換するにはどうすればよいですか?

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>`
4

5 に答える 5

4

まず、作成しているURLが&記号を%26にエスケープしていることを確認します。これにより、サーバーに到達したときにアンパサンドにならないようにします。次に、書き換えルールにBタグを追加して、&に変換されないようにします。

RewriteRule ^(。*)$ index.php?url = $ 1 [B、QSA、L]

このBタグは、さまざまな書き換えルールを2日間試した後、私のお尻を救いました。

于 2012-09-07T00:04:05.090 に答える
1

追加

RewriteRule ^(.*)\&(.*)$ $1\%26$2

あなたの書き直しルールに。

于 2009-08-23T07:51:33.647 に答える
1

によって変更されたクエリ文字列でアンパサンドをエスケープする適切な方法は次のとおりmod_rewriteです。

%2526

それがphpによって処理されている場合。

apache が書き換えると、どの php%2526から%26変換さ&れて query 変数に格納されます。

書き換えルールの使用Bも機能しますが、パラメーター内のすべてのプラス記号は php のプラス記号のままです。

私が直面しなければならなかった現実の例:

/group/Simon+%26+Garfunkel

B書き換えると

group.php?group=Simon+%26+Garfunkel

そしてphpであなたは得る

$group="Simon+&+Garfunkel";

あなたが欲しかったとき

$group="Simon & Garfunkel"

あなたが必要とするBで

/group/Simon%20%26%20Garfunkel

これは正常に動作します。

Bあなたなしで

group.php?group=Simon%20&%20Garfunkel

そして、あなたはで終わる

$group="Simon ";

&クエリ文字列を分割するためです。

でも二重に逃げたら

/group/Simon+%2526+Garfunkel

に書き換えます

group.php?group=Simon%20%26%20Garfunkel

そして、あなたはで終わる

$group="Simon & Garfunkel";

予想通り。

mod_rewriteURL が「クリーンな URL」に解析されない場合は、問題なく使用できます%26

于 2017-08-26T18:40:31.130 に答える
0

このルールを自分のルールの上に置いてみてください。

RewriteRule ^([^&]*)&(.*) $1\%26$2 [N]
于 2009-08-23T08:29:04.540 に答える
0

さらに、URL にアンパサンドを含むリダイレクトをブラウザに送り返したい場合は、RewriteRule の末尾に [NE] フラグを追加できます。

RewriteRule ^/(.*) /index.php?p=yourpage_\%26_something_else [NC,NE,R=301,L]
于 2010-05-22T20:40:14.180 に答える