2

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

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

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

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

4

4 回答 4

5

不知道该规则如何为您工作。首先,它循环。$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标志确保&得到编码。

于 2013-09-05T16:58:40.200 回答
0

像这样执行 URL:

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

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

于 2013-09-05T16:58:52.880 回答
0

您需要'ab&cd'使用urlencode进行 URL 编码 ,以便&转换为%26.

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

于 2013-09-05T16:58:27.290 回答
0

用你的网址做

RewriteRule ^directory/([^/.]+)$ /searchpage.php?search_keywords=$1  [L]
于 2016-06-09T07:31:52.857 回答