2009-08-22 18 views
1

私はhtaccessからリダイレクトされたページを持っています。 今私はhtaccess文字エンコーディングの問題

のようなのparams

としてドイツ語の文字を渡すことができ、それがローカルホストで動作している

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ^([a-zA-Z0-9äÄöÖüÜéß\-]*)/?$ page.php?var=$1 [L] 

をsite.com/maörx/idasd。サーバー上ではありません.... サーバー同じ古い問題(エラー404:オブジェクトが見つかりません!)

上記のコードは、サーバーには正しいですか?

答えて

3

ルールが機能する場合は、文字エンコード(.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] 
+0

、なぜそのは、サーバーでのみ起こります。 .. 私のローカルマシンは動作しています....( – coderex

+0

ファイルやURIに異なるエンコーディングを使用しているかもしれません。 – Gumbo

+1

+1、Apacheはバイトを扱うので、元のルールはISO-8859-1の投稿は、今日のURLが事実上UTF-8であるためまれである。古いキャラクターを通して;あなたがPHPスクリプトで必要とする文字のチェックを行う、それは書き直しとしてWebサーバーのレイヤーのようなロジックを配置する意味がありません。 – bobince

0

特別なものがない限り、これらのウムラウトは、[:alpha:]、[:alphanum:]、[:upper:]、[:lower:]などの正規表現で使用してください。 ]。

たとえば、正規表現に関するWikipediaの記事のPOSIX character classesを参照してください。

関連する問題