2017-11-03 1 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 

. 예를 들어, 내가 의미가 문자 G 때문에 외국 문자들입니다 (404)를 얻을 수

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

물품. 인코딩해야합니다. 그러나 해당 키워드를 원래 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를 얻는다. 나는 콘솔을 점검했다. 로그와 사용자 입력은 암호화된다. 따라서 rewriterule이 인코딩 문제를 야기한다고 생각합니다. 그래서 나는 인코딩과 관련된 몇 가지 플래그를 추가하려고 시도했다.

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 정의 때문에 작동하지 않습니다, 당신은 모든 것을에게

를 허용하거나 유니 코드 문자와 숫자를 할 수 있도록 ([\p{L}0-9]+)를 사용하려면

대신 ([^/]+)를 사용해보십시오,

하지만 특수 표시는 허용되지 않습니다. %&*()#[email protected]

관련 문제