htaccess 为下一个条件使用标志 N

htaccess use flag N for next condition

一些搜索引擎在其索引中列出的网址有两个错误。我想将它们重定向到正确的位置。我的问题是,我想合并两个 RewriteRules,所以它只涉及一个重定向请求。

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

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

我用粗体格式标记了问题。起初我想重写 &到单个字符 & 在第二步中,我想将子目录重写到根目录。

我的 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 [L,NC,R=301]

子目录的第二个条件已经工作正常,但第一个条件出现问题!我想使用 N-Flag 来为下一个条件使用替换的请求。看起来服务器 运行 进入了无限循环或类似的情况。如果我使用 L 替换 N 它的工作,但会进行两次重定向。

您不需要 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 [L,NC,R=301]