htaccess多次重写规则

时间:2017-06-19 13:03:16

标签: .htaccess mod-rewrite

我将位于blog.example.com的wordpress博客迁移到位于example.com/articles的静态页面。

博客文章的路径始终相同(/year/month/day/title.html)。因此我为blog.example.com创建了这个重写规则:

RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/articles/$1 [R=301,L]

这很好用,所有旧文章网址都被正确重定向。现在我还想重定向一些rss-feed网址,以便我不必在我订阅的所有行星上更改它们。所以我使用以下规则扩展了我的.htaccess文件:

RedirectMatch 301 ^/category/english/feed https://www\.example\.com/categories/english/index\.xml
RedirectMatch 301 ^/category/deutsch/feed https://www\.example\.com/categories/deutsch/index\.xml
RedirectMatch 301 ^/tag/dev/feed https://www\.example\.com/tags/dev/index\.xml

RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/articles/$1 [R=301,L]
.htaccess lines 1-8/8 (END)

但现在最后一条规则与所有内容匹配,因此“blog.example.com/category/english/feed/”不会重定向到“https://www.example.com/categories/english/index.xml”,而是“https://www.example.com/articles/category/english/feed/

如果删除最后一条规则,则三个rss-feeds的重定向按预期工作。如何确保最后一条规则与所有网址不匹配?有没有办法告诉htaccess一个接一个地尝试规则并在第一场比赛后停止?或者,我如何更改最后一条规则,使其与rss-feed网址不匹配?

1 个答案:

答案 0 :(得分:1)

Change the last rewriterule to this:

RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !feed/?$
RewriteRule ^(.*)$ https://www.example.com/articles/$1 [R=301,L]