将多个动态URL重定向到单个静态URL

时间:2012-07-18 06:20:41

标签: .htaccess

我们有多个旧网址,例如:

blog/index.php?d=26&m=12&y=11   
blog/index.php?m=03&y=12&d=22&entry=entry120322-135153
blog/index.php?m=06&y=12&d=&entry=entry120602-191105    
blog/index.php?d=19&m=02&y=12

逻辑总是在index.php之后?d,?m或?y。

我需要将这些全部重定向到:

www.domain.com/blog

我从这里尝试了几种不同的方法,但似乎是混合逻辑。

附录

根据TerryE建议,当我输入链接时

  

http://www.coreyogaasia.com/blog/index.php?m=12&y=11&d=26&entry=entry111226-110412

在我的浏览器中,它解析为

  

http://www.coreyogaasia.com/blog/?m=12&y=11&d=26&entry=entry111226-110412

(删除了index.php)。但是,它不会

  

http://www.coreyogaasia.com/blog

我也把它放在wordpress上面:

# BEGIN WordPress 
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase / 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule>

1 个答案:

答案 0 :(得分:1)

您需要使用 QUERY_STRING 条件来查看参数,例如:

RewriteEngine  On
RewriteBase    /

RewriteCond %{QUERY_STRING} ^(d|m|y)=\d
RewriteRule blog/index.php  http://www.domain.com/blog?  [R=302,L]

如果你想保留参数,那么放弃?在重定向字符串中。但是,如果你这样做并且目标重定向到同一目录,那么你需要额外的条件来阻止方向循环。

一旦你完成了这项工作,就把302换成301.有关详情,请参阅Tips for debugging .htaccess rewrite rules

追踪请求后的附录

如果.htaccess中有DOCROOT/blog,则需要在RewriteBase下方和第一个WP cond /规则上方插入此内容:

RewriteCond %{QUERY_STRING} ^(d|m|y)=\d
RewriteRule index.php       http://www.domain.com/blog/?  [R=302,L]