Php 如何处理特殊字符,如&;和/在.htaccess规则中?
在.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始终是“搜索”。我假设您已经粘贴了一个
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]