在修複公司項目的時候,遇到一個問題:
點選首頁面的login按鈕,前往另一個登入頁面的時候。
位址欄重複出現:
這樣的錯誤。
在網上讨教了高人以後,訓示我去看apache的error_log。覺得這一招真的很不錯,是debug的重要步驟。這招趕緊學起來。然後在測試伺服器的log上看到一個值得注意的地方:
Request exceeded the limit of internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
在網上檢視了一下這個問題,提到要用LogLevel去做debug。
我在正式伺服器上也找了一下,也發現了一模一樣的error。看來這個地方跟那個重複的url有關。
參考這個http://40era.com/1718/ 資料以後,發現在httpd.conf檔案裡添加以下這兩句之後,apache無法正常重新開機。估計是apache新版本更新屏蔽了。
RewriteLogLevel
RewriteLog "/var/log/httpd/rewrite.log"
于是删掉這兩句,繼續查找可以檢視log的相關設定。在stackoverflow裡面找到了apache官網的資料:
http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
将這句加入以後,apache重新開機成功。然後到logs/error.log下面檢視這個trace3列印出來的錯誤。如上面那個40era所說的,有url的重複。因為是搭建在本地環境。都是127.0.0.1。是以我在.htaccess裡加入了這句話:
然後再重新開機了apache。發現那條錯誤消失了。而且我回到首頁點選login登陸按鈕的時候,竟然可以進入那個項目的登入頁面!隻不過沒有css樣式,圖檔以及還是load不到js庫。不過不會像之前一樣回到首頁面而且url重複。url顯示也正常。真是一個不小的進展。
然而還剩下一個問題就是依然load不到css/img/js這三個。看來還是跟.htaccess有關。繼續檢視相應的措施。
找到出問題的地方了。
在最外圍的htaccess,原來的$會自動更改為#,一旦更改為後者,css/js/img這些原來位于public文檔下的就會失效。
被修改的.htaccess内容如下(帶#):
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^# apg/public/ [L]
RewriteRule (.*) apg/public/#1 [L]
</IfModule>
正常的.htaccess應該為(帶$):
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ apg/public/ [L]
RewriteRule (.*) apg/public/ [L]
</IfModule>
然後開始艱苦卓絕的繼續查error_log工程……
最後同僚幫我解決了這個問題,說是apache底層服務的某幾個so子產品被我重新開機apache太多次弄壞了。是以導緻htaccess的重定向異常。他重新編譯了那幾個so子產品。就修複了這個問題。整個apache都被他扒光了一個個地排查。他說這是他第一次遇到這種問題。真是服了我了。
總而言之。問題解決了好開心,撒花!