重写循环不会停止

时间:2015-09-30 14:22:16

标签: .htaccess mod-rewrite redirect

我有一个.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

1 个答案:

答案 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>