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

Ida*_*lan 11 regex .htaccess mod-rewrite

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

问题:

/?view=products&id=12345 -> /8831
Run Code Online (Sandbox Code Playgroud)

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

由于某些原因

Redirect 301 /?view=products&id=12345 /8831
Run Code Online (Sandbox Code Playgroud)

不起作用.如果我删除问号,它没有问号.

我也尝试过:

RewriteCond %{QUERY_STRING} view=products&id=12345
RewriteRule .*$ /8831 [L,R=301]
Run Code Online (Sandbox Code Playgroud)

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

Wri*_*ken 20

RewriteCond %{QUERY_STRING} view=products&id=12345 
RewriteRule .*$ /8831? [L,R=301]
Run Code Online (Sandbox Code Playgroud)

结尾?将阻止附加原始查询参数,除非您[QSA]再次给出该标志.

手册:

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