Ubuntu

mod_rewrite 應該提供存在於文件根目錄但忽略它們的文件

  • December 9, 2010

我已經從 Wordpress 中提取了大部分內容,因此域上的任何路徑都像 say/search或被/list定向到/index.php. 很好,行得通。

但是,如果正在請求的文件存在於文件根目錄中,則不應這樣做。因此,如果我要求/exists.php它應該執行該腳本。相反,它忽略文件系統上的文件並繼續提供index.php.

<VirtualHost *:80>

 DocumentRoot /home/sites/dev
 ServerName dev.vbox

 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule . /index.php

 ErrorLog /var/log/apache2/dev.error.log

</VirtualHost>

我瀏覽了mod_rewrite 文件和各種 Google 搜尋結果,但我沒有發現我的重寫條件有任何問題。如果請求的文件名是文件或目錄,請不要重定向到/index.php.

我已經cd到 doc root 並列出了該目錄的內容,我請求的文件存在。我的 apache 訪問日誌包含/exists.php.

文件根目錄是位於我的 Mac 上的已安裝目錄,服務請求的 VM 是 Ubuntu 安裝。

我最終添加了另一個重寫條件,所以我的工作虛擬主機看起來像這樣:

<VirtualHost *:80>

 DocumentRoot /var/www/public_html
 ServerName domain.com

 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !^.*\.(php)$ [nocase]
 RewriteRule . /index.php

</VirtualHost>

嘗試%{LA-U:REQUEST_FILENAME}代替%{REQUEST_FILENAME}. 在將請求映射到文件系統之前需要 LA-U 前綴。

編輯:

在我的第一遍中沒有抓住它,您還需要像這樣將第一個參數更改為 RewriteRule:

<VirtualHost *:80>
   DocumentRoot /home/sites/dev
   ServerName dev.vbox

   RewriteEngine On
   RewriteCond %{LA-U:REQUEST_FILENAME} !-d
   RewriteCond %{LA-U:REQUEST_FILENAME} !-f
   RewriteRule .* /index.php

   ErrorLog /var/log/apache2/dev.error.log
</VirtualHost>

引用自:https://serverfault.com/questions/209192