我为图片创建了一些静态子域:
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 ......我做错了什么?
感谢提示。
答案 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]