根据查询字符串的存在将一个文件重定向到两个不同的文件

redirect one file to two differents files depending on the presence of a query string

我正在将我的博客迁移到新平台 (dotclear > drupal),我正在尝试将 RSS 提要的旧 URL 重定向到新的提要。

只有两种类型的供稿(文章或评论),每一种都有两种风格(RSS 或 atom),因此只有 4 个要重定向的 URL。

我的问题来自评论的提要与文章的提要基本相同,加上 查询字符串 (?type=co)。所以这是我的规则:

Redirect 301 /blog/rss.php?type=co   /rss-comments.xml
Redirect 301 /blog/rss.php           /rss.xml
Redirect 301 /blog/atom.php?type=co  /rss-comments.xml
Redirect 301 /blog/atom.php          /rss.xml

这适用于文章提要(没有查询字符串),但评论提要的规则似乎被忽略了,它们只是使用(无用的)查询字符串重定向到文章提要。

所以/blog/rss.php?type=co被重写为/rss.xml?type=co而不是/rss-comments.xml

我做错了什么?
我试过改变规则的顺序,效果一样...

您不能使用 Redirect 指令匹配查询字符串。像这样使用 RewriteRule

RewriteCond %{QUERY_STRING} ^type=co$ [NC]
RewriteRule ^blog/(rss|atom)\.php$ /rss-comments.xml? [L,NC,R=301]

RewriteCond %{QUERY_STRING} ^$ [NC]
RewriteRule ^blog/(rss|atom)\.php$ /rss.xml [L,NC,R=301]