.htaccess 301redirect不起作用

我有一个使用基于PHP的CMS系统的网站。

所以每个页面都是dynamic生成的,就像这样:

http://www.shuling.net.cn/index.php?_m=mod_product&_a=view&p_id=87

现在我想redirect这个特定的页面到另一个页面,即:

  • https://www.datanumen.com/sql-recovery/

所以我写的.htaccess文件如下:

redirect 301 /index.php?_m=mod_product&_a=view&p_id=87 https://www.datanumen.com/sql-recovery/ 

但是,当我将.htaccess上传到网站的根目录后,这根本不起作用。

我通过编写另一条规则来重新testing,如下所示:

 redirect 301 /sql/ https://www.datanumen.com/sql-recovery/ 

那么这个规则将完美的工作。

为什么?

谢谢

Querystring不是Redirect指令中匹配的一部分,为了redirect查询string,需要使用mod-rewrite,如下所示:

选项1

 RewriteEngine on RewriteCond %{THE_REQUEST} /index\.php\?_m=mod_product&_a=view&p_id=87 [NC] RewriteRule ^ https://www.datanumen.com/sql-recovery/? [NC,L,R] 

选项2

 RewriteEngine on RewriteCond %{QUERY_STRING} ^_m=mod_product&_a=view&p_id=87$ [NC] RewriteRule ^index\.php$ https://www.datanumen.com/sql-recovery/? [NC,L,R] 

我们使用一个空的问号 在目标url的末尾丢弃旧的查询string,否则这些查询string会默认被添加到目标url。

如果要使redirect永久化,请将R更改为R = 301

[在apache2和2.4上testing]