我有一个.htaccess
文件,应该将所有请求重定向到index.php?url=$1
,除非请求指向图像或特定文件。如果它们位于public/
文件夹的某个位置,那么它们应该被提供。如果请求的文件是public/
文件夹之外的某个图像,则会将其重定向到默认图像,如果请求的文件是HTML,JS,CSS,SWF文件,则不在{{1} }文件夹应该发送一个simle public/
。
一切都很好,除了当我从404-not found
请求图片或让我们说/public
时,他们也被重定向到默认图像。我已经尝试了所有的东西,即使是public/images
,但仍然是相同的。任何想法如何使循环停止如果文件已在第11行中提供。?
这是.htaccess文件:
%{ENV:REDIRECT_STATUS}
我使用之前答案中的代码,您可以在此处看到:Apache Rewrite module, complex rules
答案 0 :(得分:0)
使用THE_REQUEST
变量代替REQUEST_URI
,因为您的最后一条规则是将所有内容重写为/index.php
并更改REQUEST_URI
的值。
<IfModule mod_rewrite.c>
RewriteEngine on
SetEnv HTTP_MOD_REWRITE on
RewriteBase /wsproject/
Options All -Indexes
DirectoryIndex index.php
RewriteCond %{THE_REQUEST} /public/.+?\.(html|css|js|swf|jpe?g|png|gif|bmp|ico)\s [NC]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteCond %{THE_REQUEST} \.(jpe?g|png|gif|bmp|ico)\s [NC]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ public/errors/img-not-found.png [L]
RewriteCond %{THE_REQUEST} \.(html|css|js|swf)\s [NC]
RewriteRule ^ - [R=404,L]
RewriteCond %{THE_REQUEST} !/public/ [NC]
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
</IfModule>