2012-05-11 165 views
0

我創建了圖像的一些靜態子域:的.htaccess重定向靜子域和域

www.static1.domain.com 
www.static2.domain.com 

現在我想重定向不是來自靜態圖像域到www.domain.com文件,以避免重複的內容。我在我的htaccess這些規則(不存在的文件將被重定向到默默的index.php):

#Redirect static to main 
RewriteCond %{HTTP_HOST} static([0-9]+)\. 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} !\.(js|css|png|jpg|jpeg|gif)$ [NC] 
RewriteRule (.*) http://www.domain.com%{REQUEST_URI} [R=301,L] 

#Redirect non exisitng files to index.php (silent) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

重定向工作正常。但是如果我輸入一個不存在的圖像我被重定向到http://www.domain.com/index.php

test.gif的重定向應該是一個無聲的重定向到索引php ...我做錯了什麼?

感謝提示。

+0

在httpd.cond或.htaccess的某處是否有一些404處理程序?我建議您在發送上述請求時發佈匹配的access.log和error.log。 – anubhava

回答

0

就是這麼做的。當找不到http://www.static1.domain.com/test.gif時,拋出默認服務器404頁。不是最好的,但很好。

RewriteCond %{HTTP_HOST} !static([0-9]+)\. 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

RewriteCond %{HTTP_HOST} static([0-9]+)\. 
RewriteCond %{REQUEST_FILENAME} !\.(js|css|png|jpg|jpeg|gif)$ [NC] 
RewriteRule (.*) http://www.domain.com%{REQUEST_URI} [R=301,L] 
0

我不知道我是否正確理解你。通過無聲的重定向到你的意思是「index.php」不應該在url欄中,或者你的意思是url欄應該仍然是「test.gif」,但頁面應該呈現index.php?

+0

第二個:欄應該讀取test.gif,但是渲染index.php – Ilyssis

+0

更改 RewriteRule。 /index.php [L] 到 RewriteRule^/index.php [L] 這可能工作,這是我對我的幾個重定向,它的工作原理,只要你想。 – Rawkode

+0

沒有區別。無聲重定向工作正常,但不能與從靜態重定向到主重定向結合使用。 – Ilyssis

0

您不能添加多個RewriteCond行。只有最後一個適用於RewriteRule

所以這行沒有任何影響:

RewriteCond %{REQUEST_FILENAME} -f 

這就是爲什麼不存在的圖像也被重定向。

如何:

#Redirect non exisitng files to index.php (silent) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . /index.php [L] 

#Redirect static to main 
RewriteCond %{REQUEST_FILENAME} !\.(js|css|png|jpg|jpeg|gif)$ [NC] 
RewriteRule (.*) http://www.domain.com%{REQUEST_URI} [R=301,L] 
+0

這似乎導致無限循環。 – Ilyssis

+0

然後嘗試重新添加RewriteCond%{HTTP_HOST} static([0-9] +)\。線。 – JochenJung