【发布时间】:2011-12-24 03:23:03
【问题描述】:
我有 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 设置了通配符子域。
1234563可以被我根文件夹中的 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 世界还是很陌生。我需要另一双眼睛!
↓ 更新(美国东部时间 2011 年 11 月 8 日上午 9:33)↓
我尝试了 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
【问题讨论】:
-
不确定该规则有什么问题,当我使用您的 .htaccess 时,foo.domain2.com 到 foo.domain1.com 的重定向工作正常
标签: wordpress .htaccess dns subdomain redirect