2013-06-04 41 views
0

我使用.htaccess和mod_rewrite強制始終「www」。在URL中 - 當然也有其他的東西。這是我的.htaccess文件的一部分:.htaccess和mod_rewrite |總是使用www。虛擬子域的例外

RewriteCond %{REQUEST_URI} !\/images\/ [NC] [OR] 
RewriteCond %{HTTP_HOST} !^www.example\.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

RewriteCond %{THE_REQUEST} index\.php [NC] 
RewriteRule ^index\.php$ http://www.example.com/ [NC,R=301] 

RewriteRule ^images/([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+).jpg$ pic.php?picID=$1&width=$2&height=$3&corners=$4 

現在我很期待使用虛擬子域,以加快圖像加載(如:。IMG1,IMG2,等等)。原因是我的一些網頁上有很多縮略圖。

但是八方通當我嘗試通過虛擬子域加載圖像 - 例如:

我得到類似的東西:

http://www.example.com/pic.php?picID=672&width=1000&height=0&corners=0 

我將是一個解決方案,非常感謝我的問題。提前致謝!

回答

0

我有一個類似的問題最近,關鍵是要使用額外的RewriteCond條款(在2線):

RewriteCond %{HTTP_HOST} !^img1.example.com$ [NC] [OR] 
RewriteCond %{HTTP_HOST} !^img2.example.com$ [NC] [OR] 
RewriteCond %{HTTP_HOST} !^img3.example.com$ [NC] [OR] 

如果你有無限的虛擬子域它可能最好直接替換使用正則表達式,如:

RewriteCond %{HTTP_HOST} !^img([0-9]+).example.com$ [NC] [OR] 

希望能有所幫助!

+0

那麼,到目前爲止工作得很好。但現在我有一個新問題:我可以通過子域輸入整個頁面。這意味着很多重複的內容。所以我希望它只能在這個路徑中工作:http://img1.example.com/images/等 – aklein

+0

我還沒有嘗試過,但我想它會工作,如果你添加另一個RewriteCond在你的第一個結尾塊匹配URL的請求部分,如下所示:'RewriteCond%{REQUEST_URI}!^ images/[NC]' 另一種解決方案是爲所有重複的內容頁面創建301重定向,但我認爲這可能有點乏味,這取決於你的應用程序的大小。 –

+0

我只是再次查看了你的代碼,看起來你已經在你的RewriteCond語句的第一行做到了這一點 - 它實際上應該是這樣工作的,只有你不需要跳過斜線,因爲它們不需要在正則表達式中被轉義。 –