Apache2:帶有重寫規則的 400 錯誤請求,錯誤日誌中沒有任何內容?
這讓我發瘋了。
背景:我正在使用 Mac OS X 10.6 自帶的內置 Apache2 和 PHP
我有一個虛擬主機設置如下:
NameVirtualHost *:81 <Directory "/Users/neezer/Sites/"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> <VirtualHost *:81> ServerName lobster.dev ServerAlias *.lobster.dev DocumentRoot /Users/neezer/Sites/lobster/www RewriteEngine On RewriteCond $1 !^(index\.php|resources|robots\.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L,QSA] LogLevel debug ErrorLog /private/var/log/apache2/lobster_error </VirtualHost>
這是在
/private/etc/apache2/users/neezer.conf
.我的程式碼是帶有CodeIgniter 框架
lobster project
的 PHP 。嘗試載入http://lobster.dev:81/給了我:400 錯誤請求
通常,我會檢查我的日誌以查看導致它的原因,但我的日誌是空的!我查看了
/private/var/log/apache2/error_log
和/private/var/log/apache2/lobster_error
,都沒有記錄與 400 相關的任何消息。我已LogLevel
設置debug
為/private/etc/apache2/http.conf
。刪除重寫規則可以消除錯誤,但這些相同的規則適用於我的 MAMP 主機。我已經仔細檢查並
rewrite_module
載入到我的預設 Apache 安裝中。我http.conf
可以在這裡找到:https ://gist.github.com/1057091是什麼賦予了?如果您需要任何其他資訊,請告訴我。
注意:我不想
.htaccess
在項目目錄中添加重寫規則(它已簽入 git repo,我不想碰它)。
對於復雜的 mod_rewrite 規則,最好記錄事件序列以查看發生了什麼。使用RewriteLog執行此操作,並啟動RewriteLogLevel以查看詳細資訊。
mod_rewrite 非常靈活,可以用重寫規則做很多事情,而且也相當複雜。如果沒有看到更廣泛的背景,局外人將無法調試您的規則。你可以做的最好的事情是自己調試它。在一個視窗中觀察日誌,同時在第二個視窗中試驗配置更改。做一個小改動,保存文件,重新載入 apache 並再次點擊 URL。重複。
這是 Apache手冊中對 RewriteLog 的一個很好的描述:
重寫日誌
在使用 mod_rewrite 強大而復雜的功能時,幾乎總是需要使用 RewriteLog 來幫助調試。該日誌文件詳細分析了重寫引擎如何轉換請求。詳細程度由 RewriteLogLevel 指令控制。