Ubuntu
mod_rewrite 應該提供存在於文件根目錄但忽略它們的文件
我已經從 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>