2017-11-03 197 views
0

在我的htaccess中,我为我的搜索页面重写规则以创建干净的URL;RewriteRule阻止编码

原始地址:

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

重写规则:

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

清洁网址:

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

,除非我输入外文字符完美的作品。例如,如果我写

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

我得到了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它不工作,

尝试使用([^/]+),而不是如果你想允许的一切

或使用([\p{L}0-9]+)只允许Unicode的字母和数字,

但它不会允许特殊标记,如%&*()#[email protected]