0

我们在 .htaccess 中有不同的重写规则,如下所示:

RewriteEngine On

RewriteRule ^view-([_a-zA-Z]+)-([_a-zA-Z]+)$  /controllers/index.php?action=$1|$2

我们需要为我们的一些重写规则创建一个镜像重写条件,这将执行从长 URL 到短 URL 的 301 重定向。例如

RewriteRule ^controllers/index\.php\?action=([_a-zA-Z]+)\|([_a-zA-Z]+)$  /view-$1-$2 [R=301]

但是,由于某种原因,这条规则不起作用。你能帮我们理解为什么吗?

谢谢你。

更新:我们尝试了很多不同的转义序列,但似乎没有一个对我们有用

4

1 回答 1

0

我们找到了解决方案。

首先,我们不太了解 mod_rewrite 是如何工作的 - RewriteRule 无法解析查询字符串。为此,有必要添加一个重写条件,它将解析查询字符串,然后是重写规则,它将使用解析的查询字符串。

因此,为了解决我们的情况,我们需要以下内容:

RewriteCond %{QUERY_STRING}    ^action=([_a-zA-Z]+)\|([_a-zA-Z]+)$
RewriteRule ^controllers/index\.php$    /view-%1-%2?    [R=301,L]

请注意,由 RewriteCond 解析的参数是通过 % 引用的,而不是通过 $。另外,请注意,要绕过将查询字符串传递给我们使用的结果规则?在目标路径的末尾。

现在唯一剩下的就是摆脱循环重定向,但这是不同的故事。

于 2013-01-17T11:05:29.990 回答