2010-08-16 137 views
0

我討厭問關於mod_rewrite的問題,但我似乎無法得到這些規則正常工作。我曾設置並想出了一次之前,但幾年過去了,現在它只是不好玩,我的mod_rewrite的知識回到呃......動態子域名+定義的子域名通過htaccess

本質上是我想要做的是強制www在主域名example.com上。 (或迫使沒有www會更好,但我沒有遠程能夠得到與動態子域一起正常工作)。

如果my.example.com規則的存在,然後按照它們進行相應

爲別的,即:* .example.com的,傳遞給另一個文件來分析。

我目前處理的規則強制www,並正確處理動態子域,但完全忽略my.example.com規則,將其作爲通配符子域處理。看來我可以讓我的任何規則正常工作,但是當試圖讓他們一起工作時,這只是一個混蛋。如果有人知道必須讓這個工作正常,這將是超級讚賞。

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

# force www on main, force no www would be better. 
RewriteCond %{HTTP_HOST} !^(.*)\.example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

# my.example.com defined subdomain 
RewriteCond %{HTTP_HOST} !^my\.example\.com$ [NC] 
RewriteRule ^.*$ - [S=3] 
RewriteRule ^$ /mydirectory/index.php [L] 
RewriteRule ^category/([^/]+)/?$ /mydirectory/index.php?category=$1 [L] 
RewriteRule ^submit/?$ /mydirectory/process.php [L] 

# *.example.com 
RewriteCond %{HTTP_HOST} ^(.*)\.com$ [NC] 
RewriteCond %1 !^(www)\.examples$ [NC] 
RewriteRule ^([^/]+)/?$ /subdomainparse/index.php?subdomain=%1&fakedirectory=$1 [L] 
+0

嗯...似乎在我的測試服務器上正常工作。 「我的」實際上是「我的」,還是其他的東西? – 2010-08-16 20:52:58

回答

2

嘗試下列規則:

# remove www on main 
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] 
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] 

# my.example.com defined subdomain 
RewriteCond %{HTTP_HOST} !^my\.example\.com$ [NC] 
RewriteRule ^.*$ - [S=3] 
RewriteRule ^$ /mydirectory/index.php [L] 
RewriteRule ^category/([^/]+)/?$ /mydirectory/index.php?category=$1 [L] 
RewriteRule ^submit/?$ /mydirectory/process.php [L] 

# *.example.com 
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$ [NC] 
RewriteCond %1 !^www$ [NC] 
RewriteRule ^([^/]+)/?$ /subdomainparse/index.php?subdomain=%1&fakedirectory=$1 [L] 

的第一條規則現在將重定向+ www.example.com *至example.com。第三條規則將捕獲任何請求給一個不存在的主機。

+1

這似乎是完美的工作。在Tim的評論之後,我再次清除了我的緩存,並且我的原始規則開始工作,所以像往常一樣,這主要是我的用戶錯誤,但我很樂意讓no-www工作,非常感謝Gumbo! – Jervis 2010-08-16 21:18:06