使用RewriteCond%{QUERY_STRING}而不将查询字符串附加到新地址

时间:2013-03-07 16:58:46

标签: regex .htaccess mod-rewrite

我尝试使用.htaccess进行301重定向。

问题:

/?view=products&id=12345 -> /8831

旧地址和新地址之间没有关系。

出于某种原因

Redirect 301 /?view=products&id=12345 /8831

不起作用。如果我删除问号,则无问号。

我也试过了:

RewriteCond %{QUERY_STRING} view=products&id=12345
RewriteRule .*$ /8831 [L,R=301]

但它会将我重定向到/8831?view=products&id=12345,这对我不利。我不需要新网址中的查询字符串 -

1 个答案:

答案 0 :(得分:20)

RewriteCond %{QUERY_STRING} view=products&id=12345 
RewriteRule .*$ /8831? [L,R=301]

结尾?将阻止附加原始查询参数,除非您再次提供[QSA]标记。

来自the manual

  

注意:查询字符串   模式将不与查询字符串匹配。相反,您必须使用带有%{QUERY_STRING}变量的RewriteCond。但是,您可以在替换字符串中创建包含查询字符串部分的URL。只需在替换字符串中使用问号,即表示应将以下文本重新注入查询字符串。 如果要删除现有查询字符串,请仅使用问号结束替换字符串。 要将新查询字符串与旧查询字符串组合,请使用[QSA]标志。