1

.htaccess に書き換えルールがあります

RewriteRule ^page/(.*)$ my-php-page.php?cid=$1

のような文字を含むエンコードされた文字列を渡しています=-+これはエンコードされた文字列です。

V1ihnKpip6WpnY7Wm5zn2+6YUtLf2KCh4eKY

完全な URL の場合は、

http://www.example.com/my-php-page.php?cid=V1ihnKpip6WpnY7Wm5zn2+6YUtLf2KCh4eKY

+現在、これは記号のために機能しません。cidだから私はその後になるurlencodedを送信したい。

http://www.example.com/my-php-page.php?cid=V1ihnKpip6WpnY7Wm5zn2%2B6YUtLf2KCh4eKY

+記号は になります%2B。これはうまく機能しますが、.htaccess の RewriteRule を使用してこれを試した場合を除いて、機能しません。したがって、URLは次のようになります

http://www.example.com/page/V1ihnKpip6WpnY7Wm5zn2%2B6YUtLf2KCh4eKY

mypage.php ファイルは実際にcidasV1ihnKpip6WpnY7Wm5zn2 6YUtLf2KCh4eKYを何らかの理由%2Bで空白に置き換えて受け取ります。

なぜそれをしているのかもしれませんか?そして、どうすれば修正できますか。助けてくれてありがとう。

編集

私はちょうどこの解決策を見つけました - PHP $_GET var with urlencode and "&" bug.htaccess - しかし、文字列を2回するよりもエレガントな解決策があるかどうか疑問に思っていましたurlencodeか?

4

2 に答える 2

9

B書き換えフラグを追加してみてください。このフラグは mod_rewrite に後方参照をエスケープするように指示します。ドキュメントには次のように書かれています:

_rewrite は URL をマッピングする前にエスケープ解除する必要があるため、後方参照は適用時にエスケープ解除されます。B フラグを使用すると、後方参照内の英数字以外の文字がエスケープされます。

この文字は、の前のステートメント%で一致するグループへの後方参照用に予約されているため、mod_rewrite はそれらを異なる方法で処理し、最終的に を空白の後方参照に置き換えようとする可能性があります。RewriteCondRewriteRule%2

したがって、ルールは次のようになります。

RewriteRule ^page/(.*)$ my-php-page.php?cid=$1 [B]
于 2012-12-05T11:17:08.013 に答える
0

私が正しく理解していれば、この URL をリダイレクトするには:

http://www.example.com/page/V1ihnKpip6WpnY7Wm5zn2+6YUtLf2KCh4eKYこれに

http://www.example.com/my-php-page.php?cid=V1ihnKpip6WpnY7Wm5zn2+6YUtLf2KCh4eKY

RewriteEngine On
RewriteRule ^page/([^/]*)  http://www.example.com/my-php-page.php?cid=$1 [L]

結果は次のとおりです。

http://www.example.com/my-php-page.php?cid=V1ihnKpip6WpnY7Wm5zn2+6YUtLf2KCh4eKY

パラメータに変更はありません。

于 2012-12-05T11:35:10.677 に答える