0

次のことを行う mod_rewrite のルールを作成しようとしています: URL:/xml/regularStringリダイレクト先/xml/script.php?code=regularString

これは、次のような単純なルールで非常にうまく機能します。

RewriteRule ^xml/([A-Za-z0-9-]+)/?$ xml/script.php?code=$1 [NC]

(補足:なぜ?重要なのですか?オプションのリダイレクト/一致は必要ありませんが、削除すると機能しません)

とにかく...非常に珍しい特殊文字でも同じ方法でリダイレクトする必要がありますが、ルールを拡張しようとすると、= 404に一致しないか、PHPスクリプトができないように混乱します次のような理由でアクセスすることさえできます(エラーログ):

404など.../xml/]*\xc2\xb0_\xc2\xb0*[

そしてルール

RewriteRule ^/xml/([A-Za-z0-9-*°><_]+/?$...など; それらをエスケープして、またはエスケープせずに(経由で)

(これは次のようになるはずでした:URL /xml/>*°_°*<リダイレクト先/xml/script.php?code= > *°_°*<(またはPHPでデコードして同じ結果を得ることができる他のエンコーディング)

mod_rewrite が常に php スクリプトを見つけてコードをリダイレクトするようにするにはどうすればよいですか? 私はPHPでそれを元に戻す方法を理解できますが、それらのRewriteRulesでは理解できません. [B]ドキュメントで mod_rewrite のエスケープ動作を変更するために使用されていたorなどのフラグを試し[NE]ましたが、前述のエラー ログ エントリで 404 よりも良くなりませんでした。

4

1 に答える 1

0

これは、/.htaccess の Debian/Apache2 で機能しました。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^xml/([^/]+)/?$ /xml/script.php?code=$1 [NC,R=301,L]

中国語の表意文字でも、utf8エンコーディングのapache2サーバーで...

http://www.example.com/xml/急冻红辣椒 => /xml/script.php?code=急冻红辣椒

/xml/script.php が存在する必要があります。存在しない場合、無限ループが予測されます。

于 2013-11-08T16:53:17.283 に答える