ルールが機能する場合は、文字エンコード(.htaccessファイルで使用されているものと要求されたURIで使用されているもの)の両方に依存します。両方が同じであれば動作するはずです。
HTTPを介して要求のURLをエンコードする場合、ほとんどのユーザエージェントは現在、ISO 8859-1またはUTF-8のいずれかを使用しています。しかし、UTF-8は遅かれ早かれISO 8859-1を置き換えます。
コメントで気付いたbobinceのように、Apacheは.htaccessファイルを解釈する際にASCIIを1バイトエンコーディングするために内部的に使用します。したがって、UTF-8のようなマルチバイトエンコーディングを使用すると問題が発生する可能性があります。しかし、次のように独立のエンコーディングです:
# for ISO 8859-1
RewriteRule ^([a-zA-Z0-9\xC4\xD6\xDC\xDF\xE4\xE9\xF6\xFC-]*)/?$ page.php?var=$1 [L]
# for UTF-8
RewriteRule ^(([a-zA-Z0-9-]|\xC3\x84|\xC3\x96|\xC3\x9C|\xC3\x9F|\xC3\xA4|\xC3\xA9|\xC3\xB6|\xC3\xBC)*)/?$ page.php?var=$1 [L]
しかし、このような構造物を避けるために、あなただけのスラッシュやドットを除外し、PHPで、後に値を検証できます。
RewriteRule ^([^/.]*)/?$ page.php?var=$1 [L]
、なぜそのは、サーバーでのみ起こります。 .. 私のローカルマシンは動作しています....( – coderex
ファイルやURIに異なるエンコーディングを使用しているかもしれません。 – Gumbo
+1、Apacheはバイトを扱うので、元のルールはISO-8859-1の投稿は、今日のURLが事実上UTF-8であるためまれである。古いキャラクターを通して;あなたがPHPスクリプトで必要とする文字のチェックを行う、それは書き直しとしてWebサーバーのレイヤーのようなロジックを配置する意味がありません。 – bobince