Htaccess将静态子域重定向到域

时间:2012-05-11 11:06:31

标签: .htaccess redirect

我为图片创建了一些静态子域:

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.static1.domain.com/test.gif,我被重定向到http://www.domain.com/index.php

test.gif的重定向应该是一个静态重定向到索引php ......我做错了什么?

感谢提示。

3 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解你。通过静默重定向到你意味着“index.php”不应该在url栏中,或者你的意思是url栏仍然应该读取“test.gif”但页面应该呈现index.php?

答案 1 :(得分: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]

答案 2 :(得分: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]