RedirectMatch并包含L标志

时间:2014-01-17 01:10:05

标签: apache .htaccess mod-rewrite

需要一些帮助才能将 LAST或L 标记与该RedirectMatch上的301一起添加。

我正在使用的代码,如下所示,但只有 301 状态

RedirectMatch 301 ^/(folder1|folder2)($|/.*) http://fedmich.com/$1$2

我已经尝试过这些变体但它们不起作用或内部服务器出错。

RedirectMatch 301 ^/(folder1|folder2)($|/.*) http://fedmich.com/$1$2 #not working
RedirectMatch [R=301,L] ^/(folder1|folder2)($|/.*) http://fedmich.com/$1$2 #SERVER error
RewriteRule ^/(folder1|folder2)($|/.*) http://fedmich.com/$1$2 [R=301,L]    #No error, but not redirecting at all

我在我制作的每个测试代码上扫描页眉,因此它没有被“缓存”,也没有被错误地重定向。

谢谢你们


参考

  

RedirectMatch http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirectmatch

     

FLAGS - http://httpd.apache.org/docs/current/rewrite/flags.html

2 个答案:

答案 0 :(得分:2)

您无法向RedirectMatch指令添加重写标志。重写的东西是mod_rewrite的一部分,重定向的东西是mod_alias的一部分。如果你想使用'L',你可以改用mod_rewrite

RewriteEngine On
RewriteRule ^(folder1|folder2)($|/.*) http://fedmich.com/$1$2 [L,R=301]

但我不理解为什么你需要L标志的根本问题。是否还有其他您不希望应用的规则?

答案 1 :(得分:1)

mod_rewrite中的最后一个标志(L)不会停止执行进一步的规则。它只是在while循环中充当continue,并将重写的URI重新注入mod_rewrite,以便可以执行进一步的规则。

如果你想跳过某些条件的重写规则,那么在其他规则之前有一个像这样的重写规则:

RewriteRule ^(foo|bar|baz)/ - [NC,L]

使用此规则,任何与/foo//bar//baz/匹配的URI都不会受到此规则下任何重写规则的影响。