2012-03-10 48 views
1

嘗試使用htaccess實現子域名。帶htaccess的動態子域名:URL不應該在瀏覽器中更改

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

    RewriteCond %{HTTP_HOST} !^www. 
    RewriteCond %{HTTP_HOST} ^([a-z0-9]+)\.domain.com(.*)$ 
    RewriteRule ^(.*)$ http://domain.com/index.php?/public_site/main/%1/$1 [L] 
</IfModule> 

當我進入ahser.domain.com瀏覽器的URL正在發生變化。是否有一個htaccess選項,以避免在RewriteRule中使用絕對URL時發生這種情況?

+0

我看到你現在用'%'符號正確地從'RewriteCond'獲得了匹配的部分。我在代碼中發現了這個問題,在http://stackoverflow.com/questions/9632242/hostgator-wildcard-subdomain-mapping-to-url這個問題上。您使用瞭解決方案,但沒有接受答案。 – Kaz 2012-03-10 03:28:04

+0

對不起。我是新用戶。我需要至少15個聲望來接受答案。 – santosh 2012-03-10 03:49:50

回答

0

請勿重寫爲包含域名的完整網址。這會生成一個重定向,因爲它會轉到不同的網站!你可以在那裏放置microsoft.com;那麼如果沒有重定向,它將如何工作?

你必須做的是確保網頁在原始域下工作。所以,當客戶要求myname.domain.com/...如何重寫,以myname.domain.com/index.php?public_site/main/myname/...。保持域相同。 index.php?可以在任何這些域中工作。例如,即使這可以工作:

http://OTHER.domain.com/index.php?public_site/main/MYNAME/... 

即,設置它以便哪個虛擬主機訪問該路徑並不重要。

一旦你的,重寫就可以只做:

# will not trigger redirect 
RewriteRule ^(.*)$ /index.php?/public_site/main/%1/$1 [L] 

你必須要小心,不要引入一個循環,因爲你現在重定向的URL相匹配的相同重寫一個較長的網址破壞同一個域名。如果URL已經以/index.php?public_site/開頭,則需要額外的RewriteCond才能應用此重寫。

+0

嗯......你說得對。我明白爲什麼重定向需要這樣工作。 – santosh 2012-03-10 03:51:59

+0

嗯......你說得對。我明白爲什麼重定向需要這樣工作。我想在用戶端使用簡單的網址。所以如果我要在我的網站上實現子域名,在用戶端提供簡單的URL,我認爲在PHP中執行它比htaccess更好。 – santosh 2012-03-10 03:59:20

相關問題