2015-09-30 2 views
0

У меня есть файл .htaccess, который должен перенаправить все запросы на index.php?url=$1, за исключением случаев, когда запрос указывает на изображения или определенные файлы. Если они находятся где-то в директории public/, они должны быть отправлены. Если запрошенный файл является изображением где-то из папки public/, он перенаправляется на изображение по умолчанию, и если запрошенный файл является файлом HTML, JS, CSS, SWF и не находится в папке public/, следует отправить simle 404-not found назад. Все работает хорошо, за исключением того, что когда я запрашиваю образы от /public или скажем public/images, они также перенаправляются на изображение по умолчанию. Я пробовал все, даже %{ENV:REDIRECT_STATUS}, но все тот же. Любые идеи, как я мог бы остановить цикл Если файл был подан в строке 11.?Рекурсивный цикл не остановится

Вот файл .htaccess:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    SetEnv HTTP_MOD_REWRITE on 
    RewriteBase /wsproject/ 

    Options All -Indexes 
    DirectoryIndex index.php 

    RewriteCond %{REQUEST_URI} ^public/.*\.(html|css|js|swf|jpe?g|png|gif|bmp|ico)$ [NC] 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule^- [L] 

    RewriteCond %{REQUEST_URI} \.(jpe?g|png|gif|bmp|ico)$ [NC] 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule^public/errors/img-not-found.png [L] 

    RewriteCond %{REQUEST_URI} \.(html|css|js|swf)$ [NC] 
    RewriteRule^- [R=404,L] 

    RewriteCond %{REQUEST_URI} !^public/.*$ [NC] 
    RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] 
</IfModule> 

Я использую код от прежнего ответа, вы можете увидеть здесь: Apache Rewrite module, complex rules

ответ

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> 
Смежные вопросы