我有一个htaccess文件应该将任何不存在的文件/文件夹/ etc重定向到应用程序的index.php脚本中,它们由应用程序的SEO重写处理。
问题是任何丢失的图像也会重定向到应用程序中,这会导致大量额外负载,而且不必要。我一直试图让这个htaccess文件忽略图像,但即使这个应该正在工作,但事实并非如此,而且我完全没有想法为什么...
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !.*\.(gif|png|jpe?g|ico|swf)$ [NC]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?sef_rewrite=1 [L]
当我向http://www.domain.com/folder_that_doesnt_exist/image.jpg发出请求时,会重定向到index.php
当我向http://www.domain.com/folder_that_does_exist/image.jpg发出请求时,也重定向到索引脚本
我不确定我在这里丢失了什么,因为除非指定了OR,否则只有在请求通过RewriteCond语句的全部时才应用RewriteRule ?它显然不应该通过......
更新
我已将代码修改为以下内容以消除可能的问题,但它仍将所有不存在的图像重定向到脚本中...
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(gif|png|jpe?g|ico|swf)$ [NC]
RewriteCond %{REQUEST_FILENAME} !\.(gif|png|jpe?g|ico|swf)$ [NC]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?sef_rewrite=1 [L]
答案 0 :(得分:2)
Maby试试这个:
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} \.(gif|png|jpe?g|ico|swf)$ [NC]
RewriteRule .* - [R=404,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]