如何处理像&amp ;;这样的特殊字符和.htaccess规则?

时间:2013-09-05 16:51:22

标签: php regex .htaccess mod-rewrite

在我的.htaccess文件中,我定义了以下规则,

RewriteRule ^([-0-9a-zA-Z]+) search.php?id=$1

如果我正在浏览http://example.com/abcd,则上述规则正常 我需要在网址中使用符号& % - /,例如:http://example.com/ab&cd

必须对此规则进行哪些更改才能发挥作用?

4 个答案:

答案 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)

您需要使用urlencode'ab&cd'进行网址编码 以便&变为%26

在此之后,在search.php中,您需要使用urldecode对其进行说明并对其进行解码。

答案 2 :(得分:0)

执行以下网址:

http://example.com/id/ff/ffid

并写下你的规则。另外,为什么需要3个ID参数?难道你不能用第一个查找另外两个吗?

答案 3 :(得分:0)

使用您的网址

RewriteRule ^directory/([^/.]+)$ /searchpage.php?search_keywords=$1  [L]