2011-11-08 26 views
4

我有domain1.tld和domain2.tld。 Domain1.tld是主域名,domain2.tld僅僅是一個別名。我通過HTACCESS成功地將domain2.tld重定向到了domain1.tld,但我希望domain2.tld上的所有子域都動態地重定向到它們在domain1.tld上的並行子域。高級HTACCESS子域重定向(foo.dom2.com到foo.dom1.com)

例如:bla.domain2.tld應該重定向到bla.domain1.tld,而foo.domain2.tld應該重定向到foo.domain1.tld。

此解決方案需要是動態的,而不是硬編碼到特定的子域。

哈哈,我想我寫是一個包羅萬象的,一個對一個,子域包,別名域的.htaccess重定向腳本。

信息:

  • 我對BlueHost的,無法獲得虛擬主機,HTTPD.CONF等

  • 我有一個WordPress的子域網絡(多點)。這意味着我的domain1.tld子域是虛擬的。 WordPress的處理這個,所以只要我可以得到foo.domain2.tld完全重定向到foo.domain1.tld,Wordpress應該是沒有智慧和正常工作。對?

  • WordPress的「專業域映射」插件。這使我網絡上的站點擁有自己的域名。但眼下的問題只涉及我的網絡上的網站,有自己的域名,從而利用我的主域(domain1.tld)子域。

  • 因此,我有一個爲domain1.tld設置的通配符子域。

  • 但我也有domain2.tld通配符子域集,只是爲了確保在domain2.tld所有子域都去同一個IP地址作爲domain1.tld:我的思想在於然後將這些子域名應該是由我的根文件夾中的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中。我需要另一雙眼睛!

↓UPDATE(2011-11-08上午9:33 EST)↓

我嘗試的第一個解決方案喬恩林建議,並有小幅修改。最初,它不會處理domain2.com沒有一個子域,直到我把期間的第二場比賽括號對內,隨後一對帶問號。

正如你在下面看到的,我已經提前並提供了我的HTACCESS的全部內容,以防萬一你能說出有什麼矛盾。

目前與建議重寫規則正確重定向:www.domain2.com,domain2.com,並domain2.com/foo 目前不建議重寫規則重定向: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 
+1

不知道什麼是錯的規則,http://foo.domain2.com/重定向到http://foo.domain1.com/作品很好,當我使用你的.htaccess –

回答

3

你'在%{HTTP_HOST}的正確軌道上,但您需要使用反向引用(%1,%2等)來訪問與之匹配的內容。你想要做這樣的事情:

RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.domain2\.com$ [NC] 
RewriteRule ^(.*)$ http://%2.domain1.com/$1 [L,R] 

請注意,如果您嘗試訪問:「WWW」 http://www.sub.domain2.com/foo將您重定向到http://sub.domain1.com/foo,該原始請求消失。如果你想在WWW,改變規則:

RewriteRule ^(.*)$ http://%1%2.domain1.com/$1 [L,R] 
+0

好吧,所以在你提供的第一個RewriteRule中,解釋爲什麼使用百分號表示變量%2,而在$ 1中使用$。很難找到對HTACCESS語法的正確解釋。 RewriteRule的左側是引用完整的URL還是隻引用路徑? –

+0

我已更新我的問題。子域名是唯一使用您提供的RewriteRule無法正確重定向的網址。 –

+1

%1,%2,%3反向引用引用匹配先前的** RewriteCond **,而不匹配當前的* RewriteRule * –