根据查询字符串的存在将一个文件重定向到两个不同的文件
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]
我正在将我的博客迁移到新平台 (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]