htaccess使用标志N表示下一个条件

时间:2015-05-22 07:43:55

标签: .htaccess mod-rewrite url-rewriting

一些搜索引擎在其索引中列出了网址,其中包含两个错误。我想将它们重定向到正确的位置。我的问题是,我想要结合两个RewriteRules,因此只需要一个重定向请求。

拼写错误的请求路径如下所示:

。 / subdir / page.php?id = 0 & amp; name = text

我用粗体格式标记了问题。起初我想重写&放大器;单一的char&在第二步中,我想将subdir重写到根目录。

我在我的htacces中有这个规则:

RewriteCond %{THE_REQUEST} \s(.*?)\&amp\;([^\s]*) [NC]
RewriteRule ^ /%1&%2 [N,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^feeds/print.php(.*) /print.php$1 [L,NC,R=301]

subdir的第二个条件已经正常工作,但第一个出现问题!我想使用N-Flag将替换的请求用于下一个条件。似乎服务器正在运行无限循环或类似的东西。如果我使用L替换它的N工作,但会进行两次重定向。

1 个答案:

答案 0 :(得分:0)

由于您使用N标志进行完全重定向,因此您不需要R。第一个规则将在第一个删除&之后执行。

你的正则表达式也需要一些调整。试试这段代码:

RewriteCond %{THE_REQUEST} \s/+(.*?)&(\S*)\s [NC]
RewriteRule ^ /%1&%2 [L,NE,R=302]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^feeds/print\.php(.*)$ /print.php$1 [L,NC,R=301]