0

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

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>
4

1 回答 1

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。有关此的更多信息,请参阅调试 .htaccess 重写规则的提示

碰撞请求后的附录

如果你有一个.htaccessinDOCROOT/blog那么你需要在 RewriteBase 下方和第一个 WP cond/rule 上方插入它:

RewriteCond %{QUERY_STRING} ^(d|m|y)=\d
RewriteRule index.php       http://www.domain.com/blog/?  [R=302,L]
于 2012-07-18T10:23:21.233 回答