国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

rewrite

我的Rewrite 測試【作業(yè)環(huán)境】1,服務器端:基于Redhat5的apache2.2.10;使用NAT 聯(lián)網(wǎng)的VMware 虛擬機[root@localhost conf]# uname -aLi

我的Rewrite 測試

【作業(yè)環(huán)境】

1,服務器端:

基于Redhat5的apache2.2.10;

使用NAT 聯(lián)網(wǎng)的VMware 虛擬機

[root@localhost conf]# uname -a

Linux localhost.localdomain 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:02 EDT 2007 i686 i686 i386 GNU/Linux

[root@localhost conf]# pwd

/usr/local/apache/conf

[root@localhost conf]# ../bin/httpd -v

Server version: Apache/2.2.10 (Unix)

Server built: Dec 11 2008 23:30:45

2,客戶端:

Windows XP,同時也是虛擬機的宿主機;

瀏覽器使用Opera 10,使用Vmware 的NAT 網(wǎng)絡連接到虛擬機

【初始設置】

3,編譯安裝apache ,編譯的時候把Mod_rewrite打開;

安裝完成后啟用apache ,確認可以在瀏覽器里show 出來“It's Work。” 然后添加www.a.com(alias a.com)www.b.com 和www.aaa.com 三個虛擬主機 (虛擬主機的配置可參考附錄1)

學習基本的正則表達式;

在Apache 的documentRoot 內(nèi)建議相關測試文件:

[root@localhost htdocs]# pwd

/usr/local/apache/htdocs

[root@localhost htdocs]# cat 1.txt 2.txt test/3.txt > test/1.txt

this page 1

this's page 2

this's page 3

this's page 11111111111111

設置windows 宿主機的host 文件,將以下域名進行解析: 192.168.118.131 www.a.com

192.168.118.131 a.com

192.168.118.131 www.b.com

192.168.118.131 www.aaa.com

第 1 頁

我的Rewrite 測試

【開啟Rewrite 功能】

4,打開httpd.conf ,在全局配置中檢查并添加下面的內(nèi)容:

,

LoadModule rewrite_module modules/mod_rewrite.so

在虛擬主機www.a.com 內(nèi)添加下面的內(nèi)容

RewriteEngine on

RewriteCond {HTTP_HOST} ^a.com

RewriteRule ^(.*)$ http://www.a.com$1 [R,L]

RewriteLog /root/rewrite.log

RewriteLogLevel 3

嘗試在瀏覽器內(nèi)輸入a.com 進行訪問,如果url 轉(zhuǎn)跳到www.a.com 則說 明規(guī)則設置成功,同時在/root/rewrite.log里應該可以看到日志。

【入門級Rewrite 功能】

5,目標:將client 請求的主機前綴不是www.a.com 和192.168.118.131 的都跳轉(zhuǎn)到主機前綴為http://www.b.com。

實際案例:sohu.com ==》www.sohu.com ,bbs.sohu.com ==》club.sohu.com

在虛擬主機www.b.com 中添加如下內(nèi)容:

RewriteEngine on

RewriteCond {HTTP_HOST} !^www.b.com [NC]

RewriteCond {HTTP_HOST} !^www.a.com [NC]

RewriteCond {HTTP_HOST} !^192.168.118.131

RewriteCond {HTTP_HOST} !^$

RewriteRule ^(.*)$ http://www.b.com$1 [R,L]

RewriteLog /root/rewrite.log

RewriteLogLevel 3

在虛擬主機www.aaa.com 中添加如下內(nèi)容:

RewriteEngine on

RewriteCond {HTTP_HOST} !^www.a.com [NC]

RewriteCond {HTTP_HOST} !^192.168.118.131

RewriteCond {HTTP_HOST} !^$

RewriteRule ^(.*)$ http://www.b.com$1 [R,L]

RewriteLog /root/rewrite.log

RewriteLogLevel 3

實際效果:輸入www.a.com www.b.com都可直接訪問;

a.com==》www.a.com;www.aaa.com==>www.b.com

詳細參數(shù)說明:

RewriteEngine on

第2頁

我的Rewrite 測試

開啟Rewrite 功能

RewriteCond {HTTP_HOST} !^www.b.com [NC]

RewriteCond ——定義重寫發(fā)生的條件,可以理解為“篩選條件”

{HTTP_HOST}——篩選條件為HTTP_HOST

!^www.b.com [NC]——非www.b.com 開頭且不區(qū)分大小寫

RewriteCond {HTTP_HOST} !^www.a.com [NC]

,

RewriteCond {HTTP_HOST} !^192.168.118.131

RewriteCond {HTTP_HOST} !^$

!^$——HTTP_HOST非空

RewriteRule ^(.*)$ http://www.b.com$1 [R,L]

RewriteRule ——為重寫引擎定義重寫規(guī)則,語法為:

RewriteRule Pattern Substitution [flags]

上文中的意思是將匹配過的信息轉(zhuǎn)換成www.b.com ,$1意思是“正則表達式中的域/參數(shù)傳遞” 在本實驗中,$1是匹配了前文中的^(.*)$中的()內(nèi)的匹配內(nèi)容,既“/1.txt”, http://www.b.com $1 就等于 http://www.b.com/1.txt 了。

[R]——強制重定向,[L]——立即停止重寫操作,并不再應用其他重寫規(guī)則。

RewriteLog /root/rewrite.log

RewriteLogLevel 3

日志存儲位置和日志的記錄等級(最高為8級)

TOP :

1)本測試中的Rewrite 是在虛擬主機已經(jīng)接到訪問請求后才開始轉(zhuǎn)換的,所以a.com 轉(zhuǎn)化為 www.a.com 而非www.b.com ;同理,其實RewriteCond 中不必強調(diào)主機不為www.a.com 。

2)RewriteCond 可以設置多個篩選條件,如上文,就是要符合四個篩選條件才發(fā)生轉(zhuǎn)換。 RewriteRule 也可以進行多次轉(zhuǎn)換,“Pattern ”既可以是初始的HTTP_HOST頭信息, 也可以是經(jīng)過上一輪轉(zhuǎn)換處理過的結果,有興趣的人可以試一下將RewriteRule 改寫為: RewriteRule ^(.*)$ http://www.b.com [R]

RewriteRule ^(.*)$ http://www.a.com$1 [R,L]

3)測試的時候注意標點為英文,還有該有空格的位置必須有空格

4)針對這些參數(shù)的詳解可以看附錄2中的鏈接——Rewrite 模塊參數(shù)詳解。

6,移動DocumentRoot 。www.a.com==》www.a.com/test

在虛擬主機www.a.com 中更改Rewrite 部分的設置:

RewriteCond {HTTP_HOST} ^a.com

RewriteRule ^(.*)$ http://www.a.com$1 [R]

RewriteCond {REQUEST_URI} !^/test/*

RewriteRule ^/(.*)$ /test/$1 [R,L]

第一行的RewriteCond 并沒有改動,還保留第四步的狀態(tài)。而第二行的改動是將代表“立即 停止重寫操作,并不再應用其他重寫規(guī)則”的[L]去掉。第三行用了一個新的“篩選條件” “ {REQUEST_URI} ”,具體的規(guī)則就是 “!^/test/*” ,并非以/test/開頭的路徑 則執(zhí)行第四行的操作:^/(.*)$ == 》/test/$1,在域名和路徑之間加上"test/"。 所以了,如果入門級正則都不太清楚的同學還是先去補習下正則吧。

第3頁

我的Rewrite 測試

請輸入a.com/1.txt,如果正確轉(zhuǎn)換www.a.com/test/1.txt,則說明測試成功。

具體的轉(zhuǎn)化過程還要看日志,我們跟著rewrite 日志一步一步來解釋。

讓我們來cat rewrite.log,然后根據(jù)其中有代表性的記錄來進行講解:

因為輸入的是a.com ,所以被第一條RewriteCond 所匹配,這條3級日志沒記錄,但也應該清楚; init rewrite engine with requested uri /1.txt

馬上就要開始重寫請求的URI ——/1.txt了。

,

applying pattern '^(.*)$' to uri '/1.txt'

應用格式“ '^(.*)$'”去匹配“'/1.txt'”,肯定是能匹配成功了。

rewrite '/1.txt' -> 'http://www.a.com/1.txt'

根據(jù)第二條的RewriteRule ,把“1.txt ”寫到www.a 里,其中 $1= '^(.*)$' = '/1.txt'。 explicitly forcing redirect with http://www.a.com/1.txt

確認了進行rewrite ,a.com/1.txt ==》 www.a.com/1.txt;

這里說明一下,因為滿足第三行的RewriteCond ,所以會應用一次第四行的重寫規(guī)則; applying pattern '^/(.*)$' to uri 'http://www.a.com/1.txt' 現(xiàn)在將'^/(.*)$'去匹配 'http://www.a.com/1.txt'

escaping http://www.a.com/1.txt for redirect

讓“ http://www.a.com/1.txt”避開重定向。

redirect to http://www.a.com/1.txt [REDIRECT/302]

重定做了“一個輪回”,a.com/1.txt變成了www.a.com/1.txt

如果看不懂增加了www. 的URL 為什么仍然走了第三、第四條的匹配過程,請看附錄3的分實驗; init rewrite engine with requested uri /1.txt

applying pattern '^(.*)$' to uri '/1.txt'

怎么會又應用了一次第二行的轉(zhuǎn)換規(guī)則,而且還沒有下文哪?詳情見附錄4。

applying pattern '^/(.*)$' to uri '/1.txt'

rewrite '/1.txt' -> '/test/1.txt'

explicitly forcing redirect with http://www.a.com/test/1.txt

escaping http://www.a.com/test/1.txt for redirect

redirect to http://www.a.com/test/1.txt [REDIRECT/302]

完成匹配和轉(zhuǎn)換,大功告成了,但是傻傻的apache 還會再做次匹配??

init rewrite engine with requested uri /test/1.txt

applying pattern '^(.*)$' to uri '/test/1.txt'

applying pattern '^/(.*)$' to uri '/test/1.txt'

pass through /test/1.txt

看上文你就知道為什么我需要在第三行的RewriteCond 強調(diào)URI 不能是/test/了, 實際試驗中因為沒加那個限定條件造成了死循環(huán)。

7, 根據(jù)路徑部分更改域名部分的測試。最常見的就是訪問某網(wǎng)站的“domain name.com/bbs”的時候轉(zhuǎn)到“bbs.domainname.com ”。

這步的實驗是a.com/test/1.txt==》www.a.com/1.txt

下文是更改過的rewrite 功能,具體內(nèi)容就不詳解了,請根據(jù)5、6步的思路進行分析。

第4頁

我的Rewrite 測試

RewriteCond {HTTP_HOST} !^www.a.com [NC]

RewriteCond {REQUEST_URI} ^/test/* [NC]

RewriteRule ^/test/(.*)$ http://www.a.com/$1 [NC,R,L]

【中級Rewrite 功能】

8,從URL 中提取部分信息進行重組。

舉例一:www.sysinternals.com/ ==>> technet.microsoft.com/zh-cn/sysinternals/default.aspx 舉例二: user.qzone.qq.com/12345678 ==>> 12345678.user.qzone.qq.com

,

舉例三:12345678.user.qzone.qq.com ==>> user.qzone.qq.com/12345678

1)嘗試將a.www.a.com==》www.a.com/a ,嘗試將1.txt.www.a.com ==>> www.a.com/1.txt 首先請編輯Winxp 宿主機也就是http 客戶端的host 文件,確?!癮.www.a.com ”“1.txt.www.a.com ”

這類奇怪的域名是可以解析的。然后在虛擬主機a 內(nèi)加入如下內(nèi)容:

RewriteCond {HTTP_HOST} !^www.a.com [NC]

RewriteRule ^(. ) {HTTP_HOST} [C]

RewriteRule ^(.*).www.a.com http://www.a.com/$1 [NC,R,L]

第一個RewriteCond 很簡單,就是說www.a.com 開頭的不解析,NC 就是不區(qū)分大小寫。

第一個RewriteRule ^(. ) {HTTP_HOST} [C] 是一個典型應用,把用戶輸入完整的地址(GET 方式的參數(shù)

除外)作為參數(shù)傳給下一個規(guī)則。日志的動作記錄很清楚:rewrite '/' -> '1.txt.www.a.com'。但是對

這個典型應用我只知其然而不知其所以然,隨時期望高手賜教。[C]是Chain 串聯(lián)下一個規(guī)則的意思,

如果這一段能應用過去,才會應用下一段,如果無法應用該規(guī)則,則下一個RewriteRule 也不會應用。

第二個RewriteRule 就很簡單了,考慮到實際應用中不大可能出現(xiàn)1.txt.www.a.com 這樣的瘋子域名,可以

將正則從^(.*)改成^([^.] ),當然用了這個域名之后1.txt 就不可能被匹配成$1了,瀏覽器會出現(xiàn)“Bad

Request ”錯誤。

針對此問題我曾經(jīng)發(fā)帖求助,,詳情見附錄5.

2)嘗試將www.a.com/1.php轉(zhuǎn)化1.txt.www.a.com;

RewriteCond {HTTP_HOST} ^www.a.com [NC]

RewriteCond {REQUEST_URI} .php$ [NC]

RewriteRule ^/(.*).php$ http://$1.txt.www.a.com [NC,R,L]

3) 嘗試將1_23txt.www.a.com轉(zhuǎn)化成 www.a.com/uid=1/abc/23txt.php

RewriteCond {HTTP_HOST} !^www.a.com [NC]

RewriteRule ^(. ) {HTTP_HOST} [C]

RewriteRule ^(.*)_(.*txt).www.a.com http://www.a.com/

uid=$1/abc/$2.php [NC,R,L]

PS:做這三個實驗只是為了證明apache 的rewrite 功能可以做XXX ,而實際生活中應該遇不到這么怪誕的要求。 9,內(nèi)部URL 重定向。

舉例:數(shù)不勝數(shù)、不勝枚舉了??那些給你們“個人個性域名的BLOG ”大部分都是用的一個泛域名解析,然后一個 URL 轉(zhuǎn)跳滿足你們的虛榮心的。比如說xxx.blog.163.com 和xxx.cublog.com 。但是cublog 和163blog 又不

太一樣。cublog 在輸入域名后會轉(zhuǎn)跳成blog.chinaunix.net/u1/UID/,而163的blog 始終顯示是xxx.blog.

163.com 。我無法猜測163用的啥技術,但我們使用內(nèi)部url 重定向,就可以達到163blog 的效果。

目標:xiaoli.a.com/index.txt ==》www.a.com/xiaoli/index.txt

xiaowang.a.com/login.txt ==》www.a.com/xiaowang/login.txt

因為是“內(nèi)部重定向”,所以從瀏覽器地址欄是看不出來測試結果的,我們需要先建立這些可以用瀏覽器瀏覽的文件。

[root@www htdocs]# mkdir xiaowang; mkdir xiaoli;echo

"zheshixiaowangdeindext" >>xiaowang/index.txt;echo "zheshi

xiaolidelogin" >>xiaoli/login.txt

然后把xiaoli.a.com 和xiaowang.a.com 加入winxp 的host 文件。

第5頁

我的Rewrite 測試

檢查下虛擬主機的 Server Alias,確保主機可以接受前面幾個域名。

ServerAlias a.com *.a.com

,

在虛擬主機a 中配置如下內(nèi)容:

RewriteEngine on

RewriteCond {HTTP_HOST} ^[^www] .a.com$

首先要求HTTP 頭必須是xxxxxx.a.com ,但不能是www.a.com

RewriteRule ^(. ) {HTTP_HOST}$1 [C]

參數(shù)傳遞,將整個url 作為參數(shù)傳遞到下一個規(guī)則

RewriteRule ^([^.] ).a.com(.*)$

/usr/local/apache/htdocs/$1$2 [L]

這一句是關鍵點,前面的^([^.] ).a.com(.*)$ 好理解,只是把URI 匹配了一下,后面的轉(zhuǎn)換結果是本地路徑, 且要是本地絕對路徑,這樣就是內(nèi)部URL 重定向。

10, 在多個目錄中搜索頁面.

我一時想不起來什么情況下會用到這個功能,但這確實是個有意思的功能。

目標:訪問請為www.a.com/1.txt ,首先嘗試載入/a/1.txt,如果頁面不存在則載入

/b/1.txt,如果頁面仍然不存在則載入/c/1.txt;如果都不匹配,則轉(zhuǎn)到錯誤頁面。

首先創(chuàng)建測試文件和文件夾:

mkdir a ;mkdir b;mkdir c;echo "a">a/1.txt;

echo "b">b/1.txt;echo "c">c/1.txt;echo "error">error.html

虛擬主機中的轉(zhuǎn)換規(guī)則如下(注,以更改html 根目錄為/web):

RewriteCond /web/a{REQUEST_FILENAME} -f

RewriteRule ^(. ) /web/a$1 [L]

RewriteCond /web/b{REQUEST_FILENAME} -f

RewriteRule ^(. ) /web/b$1 [L]

RewriteCond /web/c{REQUEST_FILENAME} -f

RewriteRule ^(. ) /web/c$1 [L]

RewriteCond {REQUEST_URI} !/error.html

RewriteRule ^(. ) http://www.a.com/error.html [L]

#RewriteRule !^/error.html$ http://www.a.com/error.html [L]

{REQUEST_FILENAME}是一個變量,經(jīng)過實際測試我發(fā)現(xiàn)和{REQUEST_URI}意思差不多,此問題 我已發(fā)帖咨詢http://bbs.linuxtone.org/thread-4212-1-1.html。“-f ”是將TestString 視為一個路徑名并測試它是否為一個存在的常規(guī)文件,所以第一個RewriteCond 的意思是檢查 /web/a{REQUEST_FILENAME},也就是/web/a/1.txt文件是否存在,如存在則進行下一步。同 理,第二、第三個RewirteCond 是檢查下B/1.TXT或C/1.txt是否存在,而第四個則是為了防止死 循環(huán),#號注釋掉的部分可以用一條語句來替換掉上文中的兩條防止死循環(huán)的設置。

11, 根據(jù)時間進行不同的URL 重定向。

又一個很有意思的功能,根據(jù)時間開進行諸如白天/夜間,工作時間/休息時間的頁面切換。

目標:訪問www.a.com/index.html,7-19點轉(zhuǎn)跳到index_day.html,其他時間則轉(zhuǎn)跳

index_night.html。通過此案例我們可以了解一些Rewrite 模塊數(shù)值運算的功能。 RewriteCond {TIME_HOUR}{TIME_MIN} >0700

RewriteCond {TIME_HOUR}{TIME_MIN} <1900

RewriteRule ^/index.html$ http://www.a.com/index_day.html [L]

RewriteRule ^/index.html$ http://www.a.com/index_night.html [L] 第6頁

,

我的Rewrite 測試

場景一:凌晨三點訪問index.html 。{TIME_HOUR}{TIME_MIN}=0300

RewriteCond 第一步,0300>0700不成立,則第一個RewriteRule 不執(zhí)行,執(zhí)行第二個RewriteRule ,index. html==>index_night.html;然后www.a.com/index_night.html回爐重新進行匹配,RewriteCond 部分照舊, 但在執(zhí)行RewriteRule 時,對方的匹配條件是^/index.html$,當前uri 是/index_night.html,和 ^/index.html$不匹配,所以也不轉(zhuǎn)換。

場景二:中午十二點半訪問index.html ,{TIME_HOUR}{TIME_MIN}=1230

RewriteCond 第一步,1230>0700成立,繼續(xù)匹配;RewriteCond 第二步1230<1900成立;第一個RewriteRule 執(zhí)行,執(zhí)行index.html==>index_day.html。如果不加[L],則繼續(xù)執(zhí)行第二個RewriteRule ,但^/index. html$和index_day.html不匹配,也要從頭重新開始匹配;如果加上[L],則直接跳回開頭進行匹配。第二輪 匹配的時候還是會因為^/index.html$和index_day.html不匹配退出Rewrite 。

場景三:晚上九點一刻訪問index.html ,{TIME_HOUR}{TIME_MIN}=2115

RewriteCond 第一步2115>0700成立,但第二步2115<1900不成立,所以不執(zhí)行第一個RewriteRule ,而第二個 RewriteRule 執(zhí)行時^/index.html$匹配/index.html,可以正常執(zhí)行。轉(zhuǎn)換完成后進行必然是徒勞無功的第 二輪Rerwrite 過程。

Top :可以在最前面加一個RewriteCond {REQUEST_URI} ^/index.html$來跳過第二輪的RewriteRule , 但相應的也會增加兩次RewriteCond 。如何效率更高一些,大家見仁見智。

12,利用Rewrite 阻止一類盜鏈請求。

什么是盜鏈、盜鏈的危害這類話就不說了,直接切入正題。

在這個測試中,我們篩選盜鏈是根據(jù)HTTP 訪問請求中的HTTP_REFERER變量來判斷是否該拒絕這個請求的。 這次盜鏈發(fā)生在同一個apache 的兩個虛擬主機之間,經(jīng)過同高手們確認,這樣做測試也是可行的。 首先,一般架站、編寫網(wǎng)頁的時候,圖片、音頻、視頻這類文件都會有專門的文件夾進行存放,也方便管理。 所以我們首先在apache 服務器的DocumentRoot 目錄下新建個image 的目錄,并把a.jpg 和error.jpg 都丟進去。 然后,我們要寫如下這個HTML 文檔。

[root@lamp htdocs]# cat test.html

Test page

目標:同樣是訪問test.html 這個文檔,其中www.a.com/test.html是正當訪問,而

www.b.com/test.html則是應該被過濾掉的盜鏈請求,可拒絕請求或返回特定告警圖片。

實例:盜鏈的網(wǎng)易博客、qq 相冊的圖片在其他網(wǎng)站上顯示“此圖片屬于網(wǎng)易博客”“此圖片轉(zhuǎn)自QQ 空間”。 在虛擬主機a.com 中寫入這些內(nèi)容

RewriteCond {REQUEST_URI} !^/image/error.jpg

RewriteCond {HTTP_REFERER} !^http://www.a.com.*$ #RewriteRule .*jpg http://www.a.com/image/error.jpg [R,L] RewriteRule .*jpg image/error.jpg [R,L]

第一個RewriteCond 很簡單,要求URI 部分不是^/image/error.jpg,這是為了防止死循環(huán)。

第二個RewriteCond 從變量從{HTTP_REFERER}著手進行篩選,{HTTP_REFERER}是整個頁面地址,從log 里看 就是http://www.b.com/test.html;這一條是為了防止誤殺自己的訪問請求。然后應用RewriteRule 將jpg 請求 重定向到error.jpg 頁面。我們可以把篩選規(guī)則從jpg 換成png 或者mp3、avi ,達到限制其他對媒體文件的目的。 我們一般的URL 重寫都是用的“RewriteRule .*jpg http://www.a.com/image/error.jpg”這個 規(guī)則,但好像內(nèi)嵌圖片這類反盜鏈操作反而不能用這個方式來寫了,請高手指正并解惑一下。

,

總結

在寫這個Rewrite 文檔之前,我不會看日志、不會用正則、甚至不會配apache 虛擬主機;

但經(jīng)過寫這個文檔和這一系列測試,我的收獲可以用滿載而歸來形容。

本來想繼續(xù)寫高級Rewrite 重定向,但是手頭的工作實在是多,生活上的事情也

非常多,都擠到一起了,只好暫告一段落,日后再寫高級Rewrite 重定向了。

可愛的臥底 2009-11-12

第7頁

我的Rewrite 測試(附錄)

1,虛擬主機的默認配置

NameVirtualHost *:80

ServerName www.a.com

ServerAlias a.com *.a.com

DocumentRoot /usr/local/apache/htdocs

ServerName www.b.com

DocumentRoot /usr/local/apache/htdocs

ServerName www.aaa.com

DocumentRoot /usr/local/apache/htdocs

2,Rewrite 模塊參數(shù)詳解

因為RewriteCond 在三級日志中并不顯示,且本例中的兩個RewriteRule ^(.*)$和^/(.*)$太無“標志性”,太容易被混淆,特針對

a.com/1.txt==>www.a.com/test/1.txt做了一個醒目的專用規(guī)則,看了這個 日志以后你會發(fā)現(xiàn)電腦顯然沒有人腦那么聰明,很多我們“想當然”的東西 電腦并不會去照辦。

下面是具體的Rewrite 規(guī)則。

RewriteCond {HTTP_HOST} ^a.com

RewriteRule ^(.*)$ http://www.a.com$1 [R]

RewriteCond {REQUEST_URI} !^/test/*

RewriteRule ^/(1.txt*)$ /test/$1 [R,L]

下面是具體的日志,希望這個日志能啟發(fā)下大家怎么更好的進行測試,也希 望藉此提醒自己在業(yè)務服務器上部署復雜的Rewrite 時考慮下效率問題。 init rewrite engine with requested uri /1.txt

applying pattern '^(.*)$' to uri '/1.txt'

rewrite '/1.txt' -> 'http://www.a.com/1.txt'

explicitly forcing redirect with http://www.a.com/1.txt

,

applying pattern '^/(1.txt*)$' to uri 'http://www.a.com/1.txt'

escaping http://www.a.com/1.txt for redirect

redirect to http://www.a.com/1.txt [REDIRECT/302]

init rewrite engine with requested uri /1.txt

applying pattern '^(.*)$' to uri '/1.txt'

applying pattern '^/(1.txt*)$' to uri '/1.txt'

rewrite '/1.txt' -> '/test/1.txt'

explicitly forcing redirect with http://www.a.com/test/1.txt

4,Rewrite 的具體過程的小細節(jié)(二);

經(jīng)過第一次轉(zhuǎn)換之后,在第二次轉(zhuǎn)換的時候,竟然又應用了一次第二行的 RewriteCond ,而且這次匹配又沒有下文了直接應用第四行的RewriteCond 附錄1

我的Rewrite 測試(附錄)

更改虛擬主機www.a.com 中的log 等級為最高級。

RewriteLogLevel 8

然后我們會發(fā)現(xiàn)多出來兩條日志:

applying pattern '^(.*)$' to uri '/1.txt'

RewriteCond: input='www.a.com' pattern='^a.com' => not-matched

一直以為是先做RewriteCond 后作RewriteRule ,沒想到在應用了URI 匹配之后才去做

RewriteCond 對比,這里的對比結果是“not-matched ”,所以就沒應用;

applying pattern '^/(.*)$' to uri '/1.txt'

RewriteCond: input='/1.txt' pattern='!^/test/*' => matched

這個對比結果就匹配了,就可以正式應用了。

PS :據(jù)說八級日志很消耗系統(tǒng)資源,甚至三級日志都是最好別開,生產(chǎn)環(huán)境悠著點吧。

5,Rewrite 的具體過程的小細節(jié)(三);

在做URL 重定向的時候遇到了問題并發(fā)帖求助:

附錄2

附錄2

我的Rewrite 測試(附錄)

HTTP_USER_AGENT Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.2.15 Version/HTTP_REFERER null

HTTP_COOKIE null

HTTP_FORWARDED null

HTTP_HOST www.aaa.com 瀏覽器輸入的域名

HTTP_PROXY_CONNECTION null

HTTP_ACCEPT text/html, application/xml;q=0.9, application/xhtml xml,

,

image/REMOTE_ADDR 192.168.118.1

REMOTE_HOST 192.168.118.1

REMOTE_PORT 三次的值都不一樣2073、2074、2076

REMOTE_USER null

REMOTE_IDENT null

REQUEST_METHOD GET

SCRIPT_FILENAME /index.html

PATH_INFO null

QUERY_STRING null

AUTH_TYPE null

DOCUMENT_ROOT /usr/local/apache/htdocs

SERVER_ADMIN you@example.com

SERVER_NAME www.aaa.com 虛擬主機的名字

SERVER_ADDR 192.168.118.131

SERVER_PORT 80

SERVER_PROTOCOL HTTP/1.1

SERVER_SOFTWARE Apache/2.2.10

TIME_YEAR 2009

TIME_MON 10 [root@www ~]# date

TIME_DAY 13 Tue Oct 13 16:06:59 CST 2009

TIME_HOUR 16

TIME_MIN 9

TIME_SEC 11

TIME_WDAY 2

TIME 20091013161256

IS_SUBREQ FALSE

如果正在處理的請求是一個子請求,它將包含字符串"true" ,否則就是"false" 。模塊為了解析URIAPI_VERSION 20051115:18

這是正在使用中的Apache 模塊API(服務器和模塊之間內(nèi)部接口) 的版本, 其定義位于include/ap_THE_REQUEST GET /index.html HTTP/1.1

這是由瀏覽器發(fā)送的完整的HTTP 請求行(比如:"GET /index.html HTTP/1.1")。它不包含任何瀏覽REQUEST_URI /index.html

這是在HTTP 請求行中所請求的資源(比如上述例子中的"/index.html")。 REQUEST_FILENAME /index.html

這是與請求相匹配的完整的本地文件系統(tǒng)的文件路徑名。

HTTPS off__

標簽: