我有一个使用基于 PHP 的 CMS 系统的网站。
因此每个页面都是动态生成的,如下所示:
http://www.shuling.net.cn/index.php?_m=mod_product&_a=view&p_id=87
现在我想将此特定页面重定向到另一个页面,即:
因此我编写了 .htaccess 文件如下:
redirect 301 /index.php?_m=mod_product&_a=view&p_id=87 https://www.datanumen.com/sql-recovery/
但是当我将.htaccess上传到网站根目录后,这根本不起作用。
我通过编写另一条规则重新测试,如下所示:
redirect 301 /sql/ https://www.datanumen.com/sql-recovery/
那么这条规则就能完美发挥作用了。
为什么?
谢谢
答案1
查询字符串不是 Redirect 指令中匹配的一部分,要重定向查询字符串,您需要使用 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 末尾丢弃旧的查询字符串,否则这些查询字符串会默认附加到目标 url。
更改R到R=301如果您想使重定向永久生效。
[在 apache2 和 2.4 上测试]