url变量的htaccess 301重定向问题

Posted

技术标签:

【中文标题】url变量的htaccess 301重定向问题【英文标题】:htaccess 301 redirect issue with url variables 【发布时间】:2012-12-08 22:56:04 【问题描述】:

如果我使用这个代码,它是成功的:

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 中的变量是导致它失败的原因。

我做错了什么?还有其他方法可以做到这一点吗?我真的需要 urls 变量。

【问题讨论】:

【参考方案1】:

您不能将查询字符串参数放在 Redirect 指令的源 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]

【讨论】:

完美,我不知道 301 对 htaccess 文件的限制 其实乔恩,我还有一个问题。我还需要 /products.php?id=123&a=b 作为链接,但我只需要网址的第一位(id=123),我想忽略其余的 - 这可能吗?我会改变什么 我猜想在 id=123 之后谈论通配符 @cardi777 对于第一条规则,您可以将条件的正则表达式更改为 ^id=123($|&),它应该完全匹配 id=123 并忽略任何其他查询字符串参数

以上是关于url变量的htaccess 301重定向问题的主要内容,如果未能解决你的问题,请参考以下文章

301 使用 .htaccess 重定向 URL 模式

htaccess 301 重定向某些 URL 模式

.htaccess 中的 301 重定向

htaccess 重定向 301 + 重写冲突

.htaccess 无扩展 url 和 301 重定向循环

重定向.htaccess 301