2017-03-08 10 views
0

我正在嘗試使用.htaccess規則來防止某些靜態文件通過我的PHP前端控制器,但它似乎不起作用。規則如下:爲什麼這個RewriteCond跳過靜態文件類型不工作?

<IfModule mod_rewrite.c> 

RewriteEngine On 
RewriteBase/

# Don't try to pipe static files through php 
RewriteCond %{REQUEST_URI} !^(.*)\.(png|jpg|jpeg|gif|js|css|json|mp3|mp4|mov|ogv|ogg|ico)$ [NC] 
RewriteCond %{REQUEST_URI} !/wrapper/index\.php 
RewriteRule ^(.*)$ /wrapper/index.php [L] 

</IfModule> 

儘管跳過帶有特定擴展名的文件,如果我每次都打https://example.com/test.jpg請求仍通過管道輸送的/wrapper/index.php條件。

我想這種變化只是爲了測試,並沒有工作,要麼:

RewriteCond %{REQUEST_URI} (.+)\.(png|jpg|jpeg|gif|js|css|json|mp3|mp4|mov|ogv|ogg|ico) [NC] 
RewriteRule ^(.*)$ $1 [L] 

RewriteCond %{REQUEST_URI} !/wrapper/index\.php 
RewriteRule ^(.*)$ /wrapper/index.php [L] 

沒有什麼在Apache的錯誤日誌說明問題。也許我的頭腦在工作中很漫長,但我一直無法找到我的重寫條件中的缺陷。感謝您的幫助。

回答

0

通過艱苦的試驗和錯誤,我發現了這個問題,並且我還沒有完全理解這個機制。這個腳本是一個以前工作正常的Wordpress網站的包裝。顯然是/wp-content/uploads目錄丟失和worldexecute位。一旦我調整到755,這個.htaccess規則再次開始工作。

我不太明白如何或爲什麼會干擾htaccess規則,但我很樂意回來服務。

0

第一個條件有錯誤 - 它會跳過所有開始帶點的文件,跟隨任何內容並結尾寫入擴展名。只需輸入^ *,如下所示:

RewriteCond %{REQUEST_URI} !(.+)\.(png|jpg|jpeg|gif|js|css|json|mp3|mp4|mov|ogv|ogg|ico)$ [NC] 
+0

感謝你的想法,但我很傷心地報告你的修改條件沒有改變。 –

+0

我衷心感謝這一努力,但它仍然沒有任何區別。 –

+0

好吧,更新後的答案實際上已經過測試(除了向靜態文件列表添加「txt」擴展名)並且它按預期工作。這是你的.htaccess文件的全部內容嗎? –