我今天一直在寻找管子,但鉴于我有限的 mod_rewrite 和正则表达式知识,我正在苦苦挣扎。
我想要实现的是将域 1(包括子域)重写为域 2(包括子域)并实现为 301。域 2 是主域,域 1 只是(暂时)设置并真正就在那里,因为“它是”(一个更好的用途正在等待,我想我会用它来学习一些东西)。
域 2 配置为通配符,并托管通过子域 -> 子文件夹内部重写显示的微型站点。(很乐意应要求发布此代码,这并不棘手,但出于某种奇怪的原因,我确实花了一段时间才让它在没有无限重写的情况下工作)。域 1(临时域)根本没有设置,只是因为我面临几个选项(DirectAdmin 实现的“别名”或“指针”,或者添加为单独的域并配置为通配符)。如果有人去域 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
困扰我的是,网络上所有现成的解决方案要么将子域映射到目录,要么只编码以处理通过http://domain1.tld/
. 我自己的旧 htaccess 之一,用于将 .co.uk 重定向到 .com,开始了我想去的地方:
RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.foo\.com [NC]
RewriteRule ^(.*)$ http://foo.co.uk/$1 [R=301,L]
我知道这$1
表示与模式匹配的域之后的所有内容^(.*)$
,并且%2
将是子域(所以我假设%1
如果它存在于 http_referer 中,它将是“www。”或者为空?)
...但是,这就是我卡住的地方。将任何变量传递到新域名的最简洁的重写方法是什么 - 并且在此过程中不会丢失任何子域?
在 domain1 的配置中是否有重定向不起作用的原因:
Redirect
将 LHS 下的所有内容重定向到 RHS,保持相同的目录结构。或者,一个更简单的解决方案是只添加
ServerAlias domain2
domain1 的配置,尽管这不会发送重定向,只是让服务器以与 domain1 相同的方式响应对 domain2 的请求。尝试以下(未经测试):
我想你想要这样的东西:
这将保留 %1(foo.com 的子域部分,包括 www,如果存在)并将其放入
RewriteRule
. 请记住,这些只是在mod_rewrite
修改它们时的字符串,因此您可以对它们做任何事情。如果可选的 www 部分给您带来问题,请将其拆分为两个
RewriteCond
语句: