Php 如何处理特殊字符,如&;和/在.htaccess规则中?

Php 如何处理特殊字符,如&;和/在.htaccess规则中?,php,regex,.htaccess,mod-rewrite,Php,Regex,.htaccess,Mod Rewrite,在.htaccess文件中,我定义了以下规则 RewriteRule ^([-0-9a-zA-Z]+) search.php?id=$1 如果我正在浏览,上面的规则很有效 我需要在url中使用符号&%-/,如: 必须对规则进行哪些更改才能使其生效?您需要使用URL编码'ab&cd' 这样&就变成了%26 在这之后,您需要在search.php中解释并解码它,使用。不知道该规则如何为您工作。首先,它是循环的。其次,$2和$3没有捕获组,但这并不重要,因为$1始终是“搜索”。我假设您已经粘贴了一个

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

RewriteRule ^([-0-9a-zA-Z]+) search.php?id=$1
如果我正在浏览,上面的规则很有效 我需要在url中使用符号
&%-/
,如:


必须对规则进行哪些更改才能使其生效?

您需要使用URL编码
'ab&cd'
这样
&
就变成了
%26


在这之后,您需要在search.php中解释并解码它,使用。

不知道该规则如何为您工作。首先,它是循环的。其次,
$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
您需要匹配
)。更好的选择可能是只匹配除点以外的所有点:

或者你在比赛中不想要的任何东西


尝试:

这里的区别是将匹配绑定到URI末尾的
$
,而
B
标志确保
&
被编码。

像这样处理URL:

http://example.com/id/ff/ffid
还有,为什么你需要3个ID参数?你不能用第一个来查找另外2个吗?

用你的url
实际的URL是
http://example.com/ab&cd
?似乎很奇怪。我需要URL在其
/AT%26T
或即使其
/AT&T
很抱歉,这里不需要最后两个参数。我已从问题中删除了它们。RewriteRule^([-0-9a-zA-Z]+)\/?search.php?id=$1[L]很抱歉,规则中的最后两个ID参数在这里没有使用。我尝试了上面提到的两个规则,但是,如果url是
/AT%26T
/AT&T
,则在search.php文件中只接收到
AT
。有同样的问题,我使用了答案解决方案,但它在我的应用程序中不起作用,这就是我的想法实际的链接是()……在使用.htaccess之后,它会像-------(),但它不是working@abas_rafiq尝试将其作为问题发布,因为您无法在中格式化任何内容comments@jon林,这是我的问题
RewriteRule ^([^.]+)$ search.php?id=$1 [B]
http://example.com/id/ff/ffid
RewriteRule ^directory/([^/.]+)$ /searchpage.php?search_keywords=$1  [L]