将所有子域重定向到不同域的子域

时间:2014-03-18 11:13:09

标签: .htaccess mod-rewrite redirect dns subdomain

您好我需要将域中的所有子域重定向到相同的子域但位于不同的域。猜测的最佳方式是通过htaccess文件,但我不确定文件是如何的。

Example:
sd1.example.net  --->  sd1.example.com
sd2.example.net  --->  sd2.example.com
sd3.example.net  --->  sd3.example.com

但我需要对example.net中的所有子域进行此操作。感谢。

1 个答案:

答案 0 :(得分:0)

如果您在example.net上运行Apache服务器,并且所有子域的请求都在同一个父目录中,您可以执行以下操作:

RewriteEngine On

### Find the subdomain part (it will be available in %1)
### Use one of the RewriteCond-s and delete the other one

# Only redirect subdomains, not plain example.net
RewriteCond %{HTTP_HOST} ^(.*)\.example\.net$

## Redirect both subdomains and plain example.net (uncomment to enable)
#RewriteCond %{HTTP_HOST} ^(.*\.)?example\.net$

# Find the path requested (it will be available in $0)
# This rule does not attempt to match the domain, only the path
# Redirect subdomain and path to example.com
RewriteRule ^.*$ http://%1.example.com/$0 [L]

我没有对此进行测试,因此可能会丢失查询字符串等。它还会不合需要地将https://重定向到http://。只要您有一个可以影响所有子域的.htaccess文件,这应该可以工作,或者至少是一个非常好的起点。查看Apache's mod_rewrite documentation以获取有关其工作原理的更多信息。

修改

最近我自己想要做到这一点,我已经制定了一个简短的.htaccess文件,可以解决这个问题:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(.*\.)?olddomain\.com$
RewriteRule ^(.*?/)?public_html/(.*)?$ "http\:\/\/%1newdomain\.org\/$2" [R=301,NE,L]

它采用以下文件结构:

.htaccess
public_html/
+-content
lots/
+-public_html/
| +-content
of/
+-public_html/
| +-content
subdomains/
+-public_html/
  +-content

我的主要网站(newdomain.org)位于/public_html/。我有许多子域名,例如subdomains.newdomain.org中的/subdomains/public_html/。这使我的每个子域的所有文件完全彼此分离,并与我的主站点完全分开。 (我的托管服务建议/public_html//public_html/subdomains/但这意味着每个子域也可以在newdomain.org/subdomains/访问,这不是我想要的。这给我的唯一限制是我永远不会有一个名为public_html的子域名,我认为你同意这个子域名是完全可以接受的。

规则上的标志如下:

  • R=301 - 使用301 Moved Permanently代码重定向。如果您不需要永久重定向,则可以更改代码,例如302
  • NE - 无编码 - 请勿对新地址进行URI编码,即将%保留为%,而不是%25
  • L - 最后 - 停止处理规则

注意.htaccess文件必须位于Web服务器的根目录中,而不是位于包含内容文件的目录中。这是因为重写规则适用于文件系统级别,而不是URL地址级别。

地址:

  • any.subdomain。的 olddomain.com /any/address.html?any=query&you=like

更改为:

  • any.subdomain。的 newdomain.org /any/address.html?any=query&you=like