我正在尝试重定向:
www.mysite.com/product.html?item=example
为:
www.mysite.com/example
我的.htaccess文件中有这个重写规则,但它不起作用:
RewriteRule ^/product\.html\?item=(.*)$ /$1 [R=301,L]
非常感谢任何帮助。
这就是我现在所拥有的:
RewriteCond %{QUERY_STRING} ^item=(.*)$
RewriteRule ^/product\.html$ /%1 [R=301,L]
这是我在规则开头摆脱正斜杠并在规则末尾添加一个问号以摆脱查询字符串后的最终结果:
RewriteCond %{QUERY_STRING} ^item=(.*)$
RewriteRule ^product\.html$ /%1? [R=301,L]
答案 0 :(得分:0)
由于您位于.htaccess
文件中,因此您需要删除RewriteRule
中的前导斜杠:
RewriteCond %{QUERY_STRING} ^item=(.*)$
RewriteRule ^product\.html$ /%1? [R=301,L]
在参考传递的查询字符串时,Apache 2.2 documentation的mod_rewrite说明了这一点:
修改查询字符串
默认情况下,传递查询字符串 通过不变。但是,你可以 在替换字符串中创建URL 包含查询字符串部分。只是 在里面使用问号 替换字符串表示 应该是以下文字 重新注入查询字符串。 当您想要删除现有的 查询字符串,结束替换 字符串只有一个问号。至 结合新旧查询字符串,使用
[QSA]
标志。
正如您所发现的,您只需在替换后添加?
。