我有domain1.tld和domain2.tld。 Domain1.tld是主域名,domain2.tld只是一个别名。我通过HTACCESS将domain2.tld成功重定向到domain1.tld,但我希望domain2.tld上的所有子域同样重定向到domain1.tld上的并行子域,动态。
例如:bla.domain2.tld应该重定向到bla.domain1.tld,而foo.domain2.tld应该重定向到foo.domain1.tld。
此解决方案需要是动态的,而不是硬编码到特定的子域。
哈哈,我想我正在编写的是HTACCESS中的包罗万象,一对一,包含子域名的别名域重定向脚本。
信息:
我在Bluehost上,无法访问VHOSTS,HTTPD.CONF等。
我有一个Wordpress子域网络(多站点)。这意味着我的domain1.tld子域是虚拟的。 Wordpress处理这个,所以只要我能将foo.domain2.tld完全重定向到foo.domain1.tld,Wordpress应该是非常明智的并且正常工作。右
Wordpress拥有“专业域映射”插件。这允许我的网络上的站点拥有自己的域名。但是手头的问题只涉及我网络上的网站没有拥有自己的域名,因此在我的主域名(domain1.tld)上使用子域名。
因此,我为domain1.tld设置了通配符子域。
但我也为domain2.tld设置了一个通配符子域,只是为了确保domain2.tld上的所有子域都与domain1.tld的IP地址相同:我认为这些子域应该是可以在我的根文件夹中被HTACCESS读取。
这是我的HTACCESS中的规则,我期望这样做:
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+\.)?domain2\.com$ [NC]
RewriteRule ^(www\.)?([a-z0-9-]+\.)?(.*) http\:\/\/%2domain1\.com\/ [L]
但这不起作用。我错过了什么?
我也尝试过使用环境变量,如下所示:
RewriteCond %{HTTP_HOST} ^(www\.)?[E=subdm:([a-z0-9-]+\.)]?domain2\.com [NC]
RewriteRule ^(.*) http\:\/\/%{ENV:subdm}domain1\.com\/ [L]
......但这只是平原打破了这两个领域。 :d
我对正则表达式比较熟练,因此我在使用HTACCESS时感觉很舒服,但实际上我对HTACCESS这个世界还很陌生。我需要另一双眼睛!
我尝试了Jon Lin建议的第一个解决方案,并且不得不稍微编辑它。最初,它不会在没有子域的情况下处理domain2.com,直到我将句点放在第二个匹配括号对中并跟随该对带有问号。
正如您在下面所见,我已经完成并提供了我的HTACCESS的全部内容,以防您知道某些内容存在冲突。
目前正在使用建议的RewriteRule正确重定向:www.domain2.com,domain2.com和domain2.com/foo 目前不使用建议的RewriteRule重定向:foo.domain2.com
# Use PHP5 Single php.ini as default
AddHandler application/x-httpd-php5s .php
Options +SymLinksIfOwnerMatch
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+\.)?domain2\.com$ [NC]
RewriteRule ^(.*)$ http\:\/\/%2domain1\.com\/$1 [L,R]
# BEGIN WordPress
RewriteBase /
RewriteRule ^index\.php$ - [L]
# uploaded files
RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule . index.php [L]
# END WordPress
答案 0 :(得分:3)
你在%{HTTP_HOST}的正确轨道上,但你需要使用反向引用(%1,%2等)来访问它的匹配。你想做这样的事情:
RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.domain2\.com$ [NC]
RewriteRule ^(.*)$ http://%2.domain1.com/$1 [L,R]
请注意,如果您尝试访问:http://www.sub.domain2.com/foo,则会将您重定向到http://sub.domain1.com/foo,即“www。”原始请求的消失了。如果您需要www,请将规则更改为:
RewriteRule ^(.*)$ http://%1%2.domain1.com/$1 [L,R]