首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RewriteRule防止编码

RewriteRule防止编码
EN

Stack Overflow用户
提问于 2017-11-03 23:40:42
回答 1查看 31关注 0票数 0

在我的htaccess中,我重写了搜索页面的规则,以创建干净的URL;

原始网址:

代码语言:javascript
复制
http://www.example.com/index.php?keyword=apple

RewriteRule:

代码语言:javascript
复制
RewriteRule ^keyword/([A-Za-z0-9-]+)/?$ index.php?keyword=$1 

干净的URL:

代码语言:javascript
复制
http://www.example.com/keyword/apple

除非我输入外文字符,否则效果很好。例如,如果我写

代码语言:javascript
复制
http://www.example.com/keyword/değişmek

我得到404。这是有意义的,因为字母ğ和ş是外文字母。它们必须被编码。但如果我用原始网址写那个关键字,

代码语言:javascript
复制
http://www.example.com/index.php?keyword=değişmek

它起作用了。我得到了结果。此外,我还试图对用户在输入搜索中输入的内容进行编码,以获得干净的URL。

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

没起作用。我得到404。我检查了console.log并对用户输入进行了编码。因此,我认为重写会导致编码问题。因此,我尝试添加一些与编码相关的标志。

代码语言:javascript
复制
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]

没起作用。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-04 00:41:11

它不起作用,因为您只使用alphanumeric characters定义([A-Za-z0-9-]+)

如果你想让一切都允许的话,试着用([^/]+)代替

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

但是它不允许像%&*()#!@这样的特殊标记

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47105823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档