在我的 .htaccess 文件中,我定义了以下规则,
RewriteRule ^([-0-9a-zA-Z]+) search.php?id=$1
如果我正在浏览http://example.com/abcd ,上述规则可以正常工作,
我需要使用& % - /
url 中的符号,例如:http ://example.com/ab&cd
必须对规则进行哪些更改才能使其生效?
在我的 .htaccess 文件中,我定义了以下规则,
RewriteRule ^([-0-9a-zA-Z]+) search.php?id=$1
如果我正在浏览http://example.com/abcd ,上述规则可以正常工作,
我需要使用& % - /
url 中的符号,例如:http ://example.com/ab&cd
必须对规则进行哪些更改才能使其生效?
不知道该规则如何为您工作。首先,它循环。$2
其次, and没有捕获组$3
,但这没关系,因为$1
无论如何总是“搜索”。我假设您已经粘贴了您拥有的规则的部分片段。
&
, %
, or/
不匹配的原因是因为你的正则表达式说:
[-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
标志确保&
得到编码。
像这样执行 URL:
http://example.com/id/ff/ffid
并围绕它写下你的规则。另外,为什么需要 3 个 ID 参数?你不能用第一个查找另外两个吗?
RewriteRule ^directory/([^/.]+)$ /searchpage.php?search_keywords=$1 [L]