Dav*_*egg 5 subdomain dns wordpress .htaccess redirect
我有 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]
Run Code Online (Sandbox Code Playgroud)
但这不起作用。我错过了什么?
我也尝试过使用环境变量,如下所示:
RewriteCond %{HTTP_HOST} ^(www\.)?[E=subdm:([a-z0-9-]+\.)]?domain2\.com [NC]
RewriteRule ^(.*) http\:\/\/%{ENV:subdm}domain1\.com\/ [L]
Run Code Online (Sandbox Code Playgroud)
...但这只是平原打破了两个领域。: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
Run Code Online (Sandbox Code Playgroud)
您使用 %{HTTP_HOST} 的方式是正确的,但您需要使用反向引用(%1、%2 等)来访问与其匹配的内容。你想做这样的事情:
RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.domain2\.com$ [NC]
RewriteRule ^(.*)$ http://%2.domain1.com/$1 [L,R]
Run Code Online (Sandbox Code Playgroud)
请注意,如果您尝试访问:http://www.sub.domain2.com/foo,它会将您重定向到http://sub.domain1.com/foo,即“www”。原来的请求已经消失了。如果您想要 www,请将规则更改为:
RewriteRule ^(.*)$ http://%1%2.domain1.com/$1 [L,R]
Run Code Online (Sandbox Code Playgroud)