2017-06-12 17 views
2

私の.htaccessのURLショートカットに問題があります。.HTACCESS Unicode Recognision/Encoding

つまり、すべてはこの(今古い)コードで正常に動作します...

# URL ShortCut Maker. 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} .(.+)$ 
RewriteRule ^(.) ?open=encyclopedia&letter=$1&term=%1 [B,L,NC] 

それはexample.com/Modesty(URLは/?open=encyclopedia&letter=m&term=modestyだろうかのようにページを表示)、しかしとして正しくURLを示してい私が入力したときに問題が発生します。 example.com/Šanti、または
example.com/Đin、または
example.com/Žal
example.com/Čakra、または
example.com/Ćof ...
...私はこれらのURLのいずれかの入力した場合 - 私は入るだろうかのようにページを示しています非:
?open=encyclopedia&letter=Š&term=Šanti

EDITなど
?open=encyclopediaとされていません問題の英語の手紙/問題。

この問題に対する解決策はありますか?

+0

'example.com /Šanti'にはどのような書き換えが必要ですか? – anubhava

+0

%1を使用してmb_substrを使って最初の文字を抽出してみませんか? – Peter

+0

私は私の問題の明確化を追加しました... ...他にどのように説明するのか分かりません。 @anubhava: 'example.com /Šanti'は'?open = encyclopedia&letter =Š&term =Šanti'にリダイレクトして開きます。これは他の** ** ** ** ** ** ** ** ** ** ** ** ** ** **すべての文字に適用されます。それは二重符号化され、短縮されます。 @ピーター:どういう意味ですか? – De1an

答えて

1

あなたはルールを使用して既存のルールを変更することができます。

RewriteEngine On 

RewriteBase/

# executes repeatedly as long as there are more than 1 spaces in URI 
RewriteRule "^(\S*)\s+(\S* .*)$" $1+$2 [N,NE] 

# executes when there is exactly 1 space in URI 
RewriteRule "^(\S*)\s(\S*)$" $1+$2 [L,R=302,NE] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule ^([A-Z](?:[^\x00-\x7F]+|[A-Z])?).*$ ?open=encyclopedia&letter=$1&term=$0 [B,L,QSA] 

RewriteRule ^([^\x00-\x7F]+).*$ ?open=encyclopedia&letter=$1&term=$0 [B,L,QSA] 

否定文字クラス[^\x00-\x7F]はASCIIの範囲外の任意の文字に一致します。

+0

ケース1、つまりexample.com /Šazdiniは正しいですか? – anubhava

+0

ok私の更新ルールを今すぐ試してください。これらのルールがあなたの.htaccessの上にあることを確認してください – anubhava

+0

申し訳ありません、今私は何も理解できません。質問を編集し、これらのケースのそれぞれを明確にするよう依頼してください。 – anubhava