2017-11-03 11 views
0

私のhtaccessでは、クリーンURLを作成するために検索ページのルールを書き換えています。RewriteRuleはエンコードを防止します

オリジナルURL:

http://www.example.com/index.php?keyword=apple 

のRewriteRule:

RewriteRule ^keyword/([A-Za-z0-9-]+)/?$ index.php?keyword=$1 

クリーンURL:

http://www.example.com/keyword/apple 

私は外国の文字を入力しない限り、完璧に動作します。私は

http://www.example.com/keyword/değişmek 

を記述する場合たとえば、私は手紙GとSは外国の文字であるため、理にかなっていること404を得ます。それらはコード化されなければならない。しかし、そのキーワードを元のURLに書き込むと、

http://www.example.com/index.php?keyword=değişmek 

が動作します。私は結果を得る。また、ユーザーがクリーンURLの入力検索で入力したものをエンコードしようとしました

var url = encodeURIComponent($("#search-input").val()); 
window.location.href = "http://www.example.com/keyword/"+ url ; 
console.log(url); 

が動作しませんでした。私は404を得る。私はconsole.logをチェックし、ユーザー入力はコード化されている。したがって、私は書き換えが符号化の問題を引き起こすと思います。だから、私はエンコーディングに関連するいくつかのフラグを追加しようとしました。

RewriteRule ^keyword/([A-Za-z0-9-]+)/?$ index.php?keyword=$1 [NE] 
RewriteRule ^keyword/([A-Za-z0-9-]+)/?$ index.php?keyword=$1 [B] 
RewriteRule ^keyword/([A-Za-z0-9-]+)/?$ index.php?keyword=$1 [NE,B] 

が機能しませんでした。どんな勧告?

それは動作しません

答えて

1

あなたが([A-Za-z0-9-]+)を使用してのみalphanumeric charactersを定義したので、あなたはすべて

またはUnicode文字と数字のみを許可するように([\p{L}0-9]+)を使用できるようにしたい場合は、

ではなく([^/]+)を使用してみてください、

しかし、特別なマークは許可されません%&*()#[email protected]

関連する問題