您好我需要将域中的所有子域重定向到相同的子域但位于不同的域。猜测的最佳方式是通过htaccess文件,但我不确定文件是如何的。
Example:
sd1.example.net ---> sd1.example.com
sd2.example.net ---> sd2.example.com
sd3.example.net ---> sd3.example.com
但我需要对example.net中的所有子域进行此操作。感谢。
答案 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地址级别。
地址:
更改为: