我们在.htaccess中有不同的重写规则,如下所示:
RewriteEngine On
RewriteRule ^view-([_a-zA-Z]+)-([_a-zA-Z]+)$ /controllers/index.php?action=$1|$2
我们需要为我们的一些重写规则创建一个镜像重写条件,这将重定向从长URL到短URL。 E.g。
RewriteRule ^controllers/index\.php\?action=([_a-zA-Z]+)\|([_a-zA-Z]+)$ /view-$1-$2 [R=301]
但是,由于某种原因,这条规则不起作用。能帮助我们理解为什么吗?
谢谢。
更新:我们尝试了很多不同的转义序列,但似乎没有一个适用于我们
答案 0 :(得分: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解析的参数然后通过%引用,而不是通过$引用。 另外,请注意,为了绕过将查询字符串传递给结果规则,我们正在使用?在目标路径的末尾。
现在唯一剩下的就是摆脱循环重定向,但这是不同的故事。