.htaccess 带有url变量的htaccess 301重定向问题

.htaccess 带有url变量的htaccess 301重定向问题,.htaccess,http-status-code-301,.htaccess,Http Status Code 301,如果我使用此代码,它将成功: Redirect 301 /products.php http://website.com.au/product_123.php 但如果我这样做,那就不是: Redirect 301 /products.php?id=123 http://website.com.au/product_123.php 注意url中的变量是导致它失败的原因 我做错了什么?还有别的办法吗?我确实需要URL变量。您不能将查询字符串参数放入重定向指令的源URI路径中。您必须使用mod_r

如果我使用此代码,它将成功:

Redirect 301 /products.php http://website.com.au/product_123.php
但如果我这样做,那就不是:

Redirect 301 /products.php?id=123 http://website.com.au/product_123.php
注意url中的变量是导致它失败的原因


我做错了什么?还有别的办法吗?我确实需要URL变量。

您不能将查询字符串参数放入
重定向
指令的源URI路径中。您必须使用mod_rewrite的
%{QUERY_STRING}
变量:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=123$
RewriteRule ^/?product\.php$ http://website.com.au/product_123.php? [L,R=301]
或者更一般地说:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=([^&]+)
RewriteRule ^/?product\.php$ http://website.com.au/product_%1.php? [L,R=301]

很好,我不知道htaccess文件对301的限制实际上Jon,我还有一个问题。我还需要/products.php?id=123&a=b作为一个链接,但我只需要URL的第一位(id=123),我想忽略其余部分——这可能吗?我想我说的是id后面的通配符=123@cardi777对于第一条规则,您可以将条件的正则表达式更改为
^id=123($|&)
,并且它应该完全匹配
id=123
,并忽略任何其他查询字符串参数