301通过htaccess将第二个域redirect到第一个域,mod_rewrite同时保留子域 – 任何提示?

今天我一直在围绕着pipe,但鉴于我有限的mod_rewrite和正则expression知识,我正在努力。

我想要实现的是将domain1(包括子域)重写为domain2(包括子域),并将其实现为301.域2是主域,域1只是(暂时)设置并且真的就在那里,因为“是的”(一个更好的使用正在等待,我想用它来学习一些东西)。

域2configuration为通配符,并托pipe通过子域 – >子文件夹内部重写显示的微型站点。 (会很高兴地在这个请求后发布代码,这不是棘手的,但它确实需要我一段时间,没有无限重写,出于某种奇怪的原因)。 域1(临时域)根本没有设置,但仅仅是因为我面对几个选项(一个DirectAdmin实现的“别名”或“指针”,或添加为一个单独的域,configuration为通配符)。 如果有人进入域1(转发域),这应该发生:

http://sub.domain1.tld -> http://sub.domain2.tld http://sub.domain1.tld/content.php -> http://sub.domain2.tld/content.php http://domain1.tld -> http://domain2.tld http://domain2.tld 

什么让我烦恼的是,networking上的所有解决scheme或者将子域映射到目录,只是通过http://domain1.tld/编码来处理请求。 我自己的老办法之一,把.co.ukredirect到.com,有我想去的开始:

 RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.foo\.com [NC] RewriteRule ^(.*)$ http://foo.co.uk/$1 [R=301,L] 

我知道$1表示所有域都是由^(.*)$模式匹配的,而%2是子域(所以我假设%1将会是“www。”,如果它存在于http_referer中,或者否则为空?)

…但是,这是我卡住的地方。 重写最新的方式是将任何variables传递给一个新的域名,而不是丢失任何子域名

是否有一个原因, redirect将无法正常工作,在configuration为domain1:

 Redirect permanent / http://domain2.com/ 

Redirect将LHS下的所有内容Redirect到RHS,保持相同的目录结构。

或者,更简单的解决scheme是在domain1的configuration中添加ServerAlias domain2 ,但不会发送redirect,只会使服务器以与domain1相同的方式响应对domain2的请求。

尝试一下(未经testing):

 RewriteMatch 301 http://(.*)domain1.com(.*) http://$1domain2.com$2 

我想你想要这样的东西:

 RewriteCond %{HTTP_HOST} ^((www\.)?[^\.]+)\.foo\.com [NC] RewriteRule ^(.*)$ http://%1.foo.co.uk/$1 [R=301,L] 

这将保持%1(foo.com的子域名部分,包括www如果存在),并将其放入RewriteRule的RHS。 请记住,这些只是string,而mod_rewrite是他们,所以你可以做任何事情。

如果可选的www部分给你提供了问题,将其分成两个RewriteCond语句:

 RewriteCond %{HTTP_HOST} ^(www\.[^\.]+)\.foo\.com [NC] [OR] RewriteCond %{HTTP_HOST} ^([^\.]+)\.foo\.com [NC] RewriteRule ^(.*)$ http://%1.foo.co.uk/$1 [R=301,L]