.htaccess 301从具有查询字符串的URL重定向到具有不同查询字符串的新域

.htaccess 301从具有查询字符串的URL重定向到具有不同查询字符串的新域,.htaccess,redirect,query-string,http-status-code-301,.htaccess,Redirect,Query String,Http Status Code 301,我想知道如何在我的htaccess文件中执行301重定向,以将一些文件重定向到新域。以下是我需要知道的方法: 旧网址: 新网址: 重定向不必自动创建。我可以在htaccess文件中硬编码我需要重定向的页面,我只是不知道要使用什么格式,因为我已经读到“标准”301重定向无法处理查询字符串 基本上这就是我想做的,但从我目前的研究来看,这似乎不可能做到 redirect 301 /index.php?page=news&id=2366 http://www.example2.com/news.

我想知道如何在我的htaccess文件中执行301重定向,以将一些文件重定向到新域。以下是我需要知道的方法:

旧网址:

新网址:

重定向不必自动创建。我可以在htaccess文件中硬编码我需要重定向的页面,我只是不知道要使用什么格式,因为我已经读到“标准”301重定向无法处理查询字符串

基本上这就是我想做的,但从我目前的研究来看,这似乎不可能做到

redirect 301 /index.php?page=news&id=2366 http://www.example2.com/news.php?name=23546

您可以将重写规则与查询字符串匹配条件一起使用,例如:

RewriteEngine On
RewriteCond   %{REQUEST_URI}    ^/index.php$
RewriteCond   %{QUERY_STRING}   ^page=news&id=2366$
RewriteRule   ^(.*)$ http://www.example2.com/news.php?name=23546   [R=301,L]

查看更多关于如何工作的信息。

我也有同样的问题,但更复杂,因为我需要放弃其他参数

像这样:
my old page.php?a=1&b=2&c=3

我需要使用其中一个字符串并丢弃其他字符串,但该解决方案只有在我想使用最后一个参数(c=3)时才起作用。如果我想使用任何其他(a=1或b=2),它将运行到404。经过一番努力和探索,我找到了一个答案:

RewriteCond %{QUERY_STRING}  ^.* ?b=2.* ?$ (without space after the *)

RewriteRule (.*)  http://www.my-webpage.php/new-location-2?  [R=301,L]
解决方案是在要使用的参数前后添加
“*?”


我不知道这是否是最好的解决方案,但它是有效的。

我也有同样的问题-我很好奇为什么简单的重定向301。。。根据我所有的谷歌搜索,它似乎不起作用。