2015-09-30 94 views
0

我有一個.htaccess文件應該將所有請求重定向到index.php?url=$1,除非請求指向圖像或特定文件。如果這些文件夾位於public/文件夾的某個位置,則應將其送達。如果請求的文件是public/文件夾以外的圖像,則將其重定向到默認圖像,並且如果請求的文件是HTML,JS,CSS,SWF文件並且不在public/文件夾中,則應發送一個類似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>