2013-08-01 22 views
0

OK,说我的博客网站myurl.org许多链接到一个单独的域:将olddomain查询字符串布局重定向到newdomain和新的查询字符串布局?

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] 

唯一的问题是,我还需要从oldvar查询字符串VAR改为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

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

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/?...这是:

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/?... OR x?... OR x/y?...x/y/?... OR x/y/z?... OR x/y/z/?...

通过封装它放在括号并使用|作为分离器和OR。

^$指从开始到结束的比赛,所以当它不包含任何表示比赛没有什么,这意味着根文件夹domain.com/,当有内容,将例如domain.com/x或任何你放入它的内容相匹配。

+0

感谢Prix,这有帮助。 –

+0

@AaronWaller [请将它标记为正确的答案,如果它解决了您的问题,请参阅这里。](http://stackoverflow.com/about) – Prix

+0

问题虽然...如果未满足%{QUERY_STRING}条件重写规则仍然适用域重写?此外,我有几个潜在的查询字符串键,我必须考虑,其中没有保证。我将用一个例子编辑原始问题...... –