主頁 > 服務器技術 > 如何調試Apache的URL重寫

如何調試Apache的URL重寫

PDF版本

對于Apache URL重寫的調試,一直是比較頭疼的問題,因為在服務器端并且沒有debug工具。網上流行的方法就是用rewrite的日志文件,給virtualhost添加如下設置:

 #Rewrite Log
 RewriteLog logs/drupal001.com-rewrite.log #此處可以寫絕對地址
 RewriteLogLevel 3

這樣可以在Apache默認的日志文件的地方,(一般是/var/log/httpd/),如此以來,可以通過tail -f 的方式來刷新日志文件觀察apache URL重寫的基本過程。


但是這樣的調試有很多弊端,

  1. Apache的RewriteLog指令只能在conf文件中,不能在.htaccess文件,所以必須具有root用戶權限,并且修改后需要重啟apache,對調試代理復雜性。
  2. 默認的日志位置 /var/log/httpd 也只能有root用戶才能訪問。
  3. 由于一次刷新網頁的請求很多(如很多圖片、js的請求),導致日志文件比較凌亂,查看也比較困難。

筆者在Drupal論壇里偶然發現一個比較特殊的方法,這種方法調試Apache URL Rewrite比較簡單,此方法只需要在.htaccess即可完成調試。

其一,在.htaccess的 RewriteEngine on 后面添加如下代碼

 #Should use vardump in Query
RewriteCond %{QUERY_STRING} vardump
RewriteRule (.*) http://www.baidu.com/?host=%{HTTP_HOST},rurl=%{REQUEST_URI} [R=301,L,QSA]

這樣,如果要調試某些變量,只需要在URL中加入vardump的query即可。

如:http://www.tbdskt.live/?vardump
就會跳轉到baidu.com,從URL后面的Query即可得到某些參數的值。

這里列出來Apache默認的一些變量

 #Apache variables
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
 
REMOTE_ADDR
REMOTE_HOST
REMOTE_PORT
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
 
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
 
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
 
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ
HTTPS

這樣就可以輕松的打印出某些具體變量的值,以便檢查我們的設置是否正確。

其二,我們可以單獨使用下面一行代碼

#Goto baidu
RewriteRule (.*) http://www.baidu.com/?host=%{HTTP_HOST},rurl=%{REQUEST_URI} [R=301,L,QSA]

把這行代碼放到我們想要的RewriteRule的前面,如果我們的RewriteCond驗證成功,則當前URL就可以被跳轉,否則,不跳轉。這樣可以輕松的檢查我們書寫的RewriteCond是否正確。

此方法雖然沒有檢查Log文件那樣正規,但是實用也易用,不失為一種調試URL重寫的好辦法。


聲明: 本站所有文章歡迎轉載,所有文章未說明,均屬于原創,轉載均請注明出處。
本文有效鏈接: http://www.tbdskt.live/2012/05/apache-rewrite-url-debug/
版權所有: Drupal與高性能網站架構 http://www.tbdskt.live


, ,

評論:1

發表評論
  1. avatar
    回復 升仙的豆豆
    14/08/20

    非常棒,謝謝您的調試方法

發表評論

電子郵件地址不會被公開。 必填項已用 * 標注


× 1 = 七

您可以使用這些 HTML 標簽和屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

引用:0

下面所列的是引用到本博客的鏈接
如何調試Apache的URL重寫 來自 Drupal與高性能網站架構
頂部
四川时时彩投注平台