0

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

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 的静默重定向……我做错了什么?

感谢您的提示。

4

3 回答 3

0

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

于 2012-05-11T11:11:12.237 回答
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]
于 2012-05-11T13:04:55.343 回答
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]
于 2012-05-15T10:04:50.573 回答