在我的.htaccess文件中,我定义了以下规则,
RewriteRule ^([-0-9a-zA-Z]+) search.php?id=$1
如果我正在浏览http://example.com/abcd,则上述规则正常
我需要在网址中使用符号& % - /
,例如:http://example.com/ab&cd
必须对此规则进行哪些更改才能发挥作用?
答案 0 :(得分:4)
不知道这条规则对你有用。首先,它循环。其次,$2
和$3
没有捕获组,但无关紧要,因为$1
总是“搜索”。我假设你已经粘贴了一个规则的部分片段,你可以使用它。
&
,%
或/
未匹配的原因是因为您的正则表达式所说:
[-0-9a-zA-Z]+
表示:一个或多个字母,数字或短划线。所以没有&
,%
或/
。所以你可以将它们添加到方括号中:
RewriteRule ^([-0-9a-zA-Z/%&]+) search.php?id=$1&ff=$2&ffid=$3
但是,请记住,在应用任何规则之前,URI 已解码。这意味着如果URI如下所示:
/foo%28bar
您无需与%
匹配,因为URI会被解码为:
/foo(bar
您需要与(
匹配。一个更好的选择可能只匹配每个除点:
RewriteRule ^([^.]+) search.php?id=$1&ff=$2&ffid=$3
或 在比赛中想要的任何内容。
尝试:
RewriteRule ^([^.]+)$ search.php?id=$1 [B]
这里的区别在于$
将匹配绑定到URI的末尾,B
标志确保&
被编码。
答案 1 :(得分:0)
答案 2 :(得分:0)
执行以下网址:
http://example.com/id/ff/ffid
并写下你的规则。另外,为什么需要3个ID参数?难道你不能用第一个查找另外两个吗?
答案 3 :(得分:0)
RewriteRule ^directory/([^/.]+)$ /searchpage.php?search_keywords=$1 [L]