我有一个使用基于PHP的CMS系统的网站。
所以每个页面都是dynamic生成的,就像这样:
http://www.shuling.net.cn/index.php?_m=mod_product&_a=view&p_id=87
现在我想redirect这个特定的页面到另一个页面,即:
所以我写的.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]