在我的.htaccess文件中,我定义了以下规则,
RewriteRule ^([-0-9a-zA-Z]+) search.php?id=$1
如果我正在浏览,上述规则可以正常工作 http://example.com/abcd我需要使用网址中& % - /
的符号,例如:http://example.com/ab&cd
必须对规则进行哪些更改才能使其正常工作?
不知道该规则如何为您工作。首先,它循环。其次,没有用于$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
标志可确保对&
进行编码。
您需要
使用 urlencode 对 URL 编码'ab&cd'
这样&
就会变成%26
.
在此之后,在搜索中.php您需要使用 urldecode 对其进行说明和解码。
像这样做 URL:
http://example.com/id/ff/ffid
并围绕这一点编写您的规则。另外,为什么需要 3 个 ID 参数?你不能用第一个来查找另外两个吗?
处理你的网址
RewriteRule ^directory/([^/.]+)$ /searchpage.php?search_keywords=$1 [L]