将olddomain查询字符串布局重定向到newdomain和新的查询字符串布局?

时间:2013-08-01 20:37:29

标签: .htaccess mod-rewrite query-string

好的,请说我的博客网站myurl.org指向一个单独的域名的链接:

old.myurl.org?oldvar=foo

只有old.myurl.org不再存在,并且已被new.myurl.org替换。

如果new.myurl.org上的查询字符串变量相同,我相信我可以使用以下内容从.htaccess重写:

RewirteCond %{http_host} ^old.myurl.org$ [NC]
RewriteRule ^(.*)$ new.myurl.org [L,R=301,QSA]

唯一的问题是我还需要将查询字符串var从oldvar更改为newvar并保留其数据(foo)。

有很多关于如何以不同方式重写查询字符串变量的示例,但我似乎无法找到这种情况的示例。

我需要改写:

old.myurl.org?oldvar=foo

要:

new.myurl.org?newvar=foo

修改

此外,我有几个潜在的查询字符串键值要考虑,但不是所有的都会一直存在。

所以我可能需要:

old.myurl.org?oldvar=foo&oldvar2=bar --> new.myurl.org?newvar=foo&newvar2=bar

old.myurl.org?oldvar2=bar --> new.myurl.org?newvar2=bar

这可能甚至不可能,但在一种情况下我需要去除部分查询字符串值。因此,?oldvar=foo{term}可能需要成为?newvar=foo

再次感谢!

1 个答案:

答案 0 :(得分:1)

第一个条件匹配域,第二个条件匹配查询字符串,规则将匹配您的域根:

RewriteCond %{HTTP_HOST} ^old\.myurl\.org$ [NC]
RewriteCond %{QUERY_STRING} ^oldvar=(\w+)$
RewriteRule ^$ http://new.myurl.org/?newvar=%1 [R=301,L]

您也可以放置多个查询字符串:

RewriteCond %{HTTP_HOST} ^old\.myurl\.org$ [NC]
RewriteCond %{QUERY_STRING} ^oldvar=(\w+)$ [OR]
RewriteCond %{QUERY_STRING} ^oldvar=(\w+)&oldvar2=(\w+)$
RewriteRule ^$ http://new.myurl.org/?newvar=%1&newvar2=%2 [R=301,L]

RewriteCond %{HTTP_HOST} ^old\.myurl\.org$ [NC]
RewriteCond %{QUERY_STRING} ^oldvar2=(\w+)$
RewriteRule ^$ http://new.myurl.org/?newvar2=%1 [R=301,L]

要使用您在评论中提到的x/y/z之类的路径更改RewriteRule,例如我们当前使用的规则,只会从yourdomain.com/?...重定向,即:< / p>

RewriteRule ^$ http://new.myurl.org/?newvar2=%1 [R=301,L]

如果你想要捕捉不同的路径,你会这样做:

RewriteRule ^x/?$ http://new.myurl.org/?newvar2=%1 [R=301,L]

以上内容会抓住yourdomain.com/x?...yourdomain.com/x/?...

您也可以拥有多个路径并使用这样的OR条件:

RewriteRule ^(x|x/y|x/y/z)/?$ http://new.myurl.org/?newvar2=%1 [R=301,L]

以上表示我们希望匹配x/?...x?...x/y?...x/y/?...x/y/z?...x/y/z/?...

通过将其封装在括号上并使用|作为分隔符和OR。

^$表示从开始到结束匹配,因此当它包含任何内容时意味着不匹配任何意味着根文件夹domain.com/,当有内容时它将匹配内容实例domain.com/x或其中的任何内容。