環(huán)境:debian4 apache2.0.63
1:apache 安裝
./configure --prefix=/usr/local/apache2
make
make install
2:基本apache操作
cd /usr/local/apache2/bin
sudo ./apachectl start
sudo ./apachectl stop
sudo ./apachectl restart
sudo ./apachectl configtest
3:編譯安裝mod_rewrite
cd apache下載源目錄
find ./ -name mod_rewrite.c
進(jìn)入 mod_rewrite.c 目錄
sudo /usr/local/apache2/bin/apxs -i -a -c mod_rewrite.c
參數(shù)說明:
-i : 執(zhí)行安裝操作,將so 安裝到 modules目錄
-a: 在httpd.conf中激活該模塊
-c: 執(zhí)行編譯操作
##將/* 及/*/*的請求都轉(zhuǎn)向到 /new/index.htm , 同時(shí)瀏覽器顯示的是前者的鏈接。
RewriteEngine On
RewriteRule ^/.*(/(.*))?$ /new/index.htm [L,PT]
附:RewriteRule 參數(shù)
RewriteRule Pattern Substitution [flags]
Pattern是一個(gè)作用于當(dāng)前URL的perl兼容的正則表達(dá)式。"當(dāng)前URL"是指該規(guī)則生效時(shí)刻的URL的值。它可能與被請求的URL截然不同,因?yàn)槠渌?guī)則可能在此之前已經(jīng)發(fā)生匹配并對它做了改動。
Substitution是當(dāng)原始URL與Pattern相匹配時(shí),用來替代(或替換)的字符串。除了純文本,還可以包含:
對Pattern的反向引用($N)
對最后匹配的RewriteCond的反向引用(%N)
規(guī)則條件測試字符串(%{VARNAME})中的服務(wù)器變量
映射函數(shù)調(diào)用(${mapname:key|default})
[flags]標(biāo)記作為RewriteRule指令的第三個(gè)參數(shù),是一個(gè)包含以逗號分隔的下列標(biāo)記的列表:
'chain|C'(鏈接下一規(guī)則)
此標(biāo)記使當(dāng)前規(guī)則與下一個(gè)規(guī)則相鏈接。它產(chǎn)生這樣的效果:如果一個(gè)規(guī)則被匹配,則繼續(xù)處理其后繼規(guī)則,也就是這個(gè)標(biāo)記不起作用;如果該規(guī)則不被匹配,則其 后繼規(guī)則將被跳過。比如,在一個(gè)目錄級規(guī)則中執(zhí)行一個(gè)外部重定向時(shí),你可能需要刪除".www"(此處不應(yīng)該出現(xiàn)".www")。
'cookie|CO=NAME:VAL:domain[:lifetime[:path]]'(設(shè)置cookie)
在客戶端設(shè)置一個(gè)cookie。cookie的名稱是NAME,值是VAL。domain是該cookie的域,比如'.apache.org',可選的lifetime是cookie的有效期(分鐘),可選的path是cookie的路徑。
'env|E=VAR:VAL'(設(shè)置環(huán)境變量)
此標(biāo)記將環(huán)境變量VAR的值為VAL,VAL可以包含可擴(kuò)展的正則表達(dá)式反向引用($N和%N)。此標(biāo)記可以多次使用以設(shè)置多個(gè)變量。這些變量可以在其后 許多情況下被間接引用,通常是在XSSI(<!--#echo var="VAR"-->)或CGI($ENV{'VAR'})中,也可以在后繼的RewriteCond指令的CondPattern參數(shù)中通 過%{ENV:VAR}引用。使用它可以記住從URL中剝離的信息。
'forbidden|F'(強(qiáng)制禁止URL)
強(qiáng)制禁止當(dāng)前URL,也就是立即反饋一個(gè)HTTP響應(yīng)碼403(被禁止的)。使用這個(gè)標(biāo)記,可以鏈接若干個(gè)RewriteConds來有條件地阻塞某些URL。
'gone|G'(強(qiáng)制廢棄URL)
強(qiáng)制當(dāng)前URL為已廢棄,也就是立即反饋一個(gè)HTTP響應(yīng)碼410(已廢棄的)。使用這個(gè)標(biāo)記,可以標(biāo)明頁面已經(jīng)被廢棄而不存在了。
'handler|H=Content-handler'(強(qiáng)制指定內(nèi)容處理器)
強(qiáng)自制定目標(biāo)文件的內(nèi)容處理器為Content-handler。例如,用來模擬mod_alias模塊的ScriptAlias指令,以強(qiáng)制映射文件夾內(nèi)的所有文件都由"cgi-script"處理器處理。
'last|L'(結(jié)尾規(guī)則)
立即停止重寫操作,并不再應(yīng)用其他重寫規(guī)則。它對應(yīng)于Perl中的last命令或C語言中的break命令。這個(gè)標(biāo)記用于阻止當(dāng)前已被重寫的URL被后繼規(guī)則再次重寫。例如,使用它可以重寫根路徑的URL('/')為實(shí)際存在的URL(比如:'/e/www/')。
'next|N'(從頭再來)
重新執(zhí)行重寫操作(從第一個(gè)規(guī)則重新開始)。此時(shí)再次進(jìn)行處理的URL已經(jīng)不是原始的URL了,而是經(jīng)最后一個(gè)重寫規(guī)則處理過的URL。它對應(yīng)于Perl 中的next命令或C語言中的continue命令。此標(biāo)記可以重新開始重寫操作(立即回到循環(huán)的開頭)。但是要小心,不要制造死循環(huán)!
'nocase|NC'(忽略大小寫)
它使Pattern忽略大小寫,也就是在Pattern與當(dāng)前URL匹配時(shí),'A-Z'和'a-z'沒有區(qū)別。
'noescape|NE'(在輸出中不對URI進(jìn)行轉(zhuǎn)義)
此標(biāo)記阻止mod_rewrite對重寫結(jié)果應(yīng)用常規(guī)的URI轉(zhuǎn)義規(guī)則。 一般情況下,特殊字符('%', '$', ';'等)會被轉(zhuǎn)義為等值的十六進(jìn)制編碼('%25', '%24', '%3B'等)。此標(biāo)記可以阻止這樣的轉(zhuǎn)義,以允許百分號等符號出現(xiàn)在輸出中,比如:
RewriteRule /sqnote/(.*) /bar?arg=P1\%3d$1 [R,NE]
可以使'/sqnote/zed轉(zhuǎn)向到一個(gè)安全的請求'/bar?arg=P1=zed'。
'nosubreq|NS'(不對內(nèi)部子請求進(jìn)行處理)
在當(dāng)前請求是一個(gè)內(nèi)部子請求時(shí),此標(biāo)記強(qiáng)制重寫引擎跳過該重寫規(guī)則。比如,在mod_include試圖搜索目錄默認(rèn)文件(index.xxx) 時(shí),Apache會在內(nèi)部產(chǎn)生子請求。對于子請求,重寫規(guī)則不一定有用,而且如果整個(gè)規(guī)則集都起作用,它甚至可能會引發(fā)錯(cuò)誤。所以,可以用這個(gè)標(biāo)記來排除 某些規(guī)則。
使用原則:如果你為URL添加了CGI腳本前綴,以強(qiáng)制它們由CGI腳本處理,但對子請求處理的出錯(cuò)率(或者資源開銷)很高,在這種情況下,可以使用這個(gè)標(biāo)記。
'proxy|P'(強(qiáng)制為代理)
此標(biāo)記使替換成分被內(nèi)部地強(qiáng)制作為代理請求發(fā)送,并立即中斷重寫處理,然后把處理移交給mod_proxy模塊。你必須確保此替換串是一個(gè)能夠被 mod_proxy處理的有效URI(比如以http://hostname開頭),否則將得到一個(gè)代理模塊返回的錯(cuò)誤。使用這個(gè)標(biāo)記,可以把某些遠(yuǎn)程成 分映射到本地服務(wù)器域名空間,從而增強(qiáng)了ProxyPass指令的功能。
注意:要使用這個(gè)功能,必須已經(jīng)啟用了mod_proxy模塊。
'passthrough|PT'(移交給下一個(gè)處理器)
此標(biāo)記強(qiáng)制重寫引擎將內(nèi)部request_rec結(jié)構(gòu)中的uri字段設(shè)置為filename字段的值,這個(gè)小小的修改使得RewriteRule指令的輸 出能夠被(從URI轉(zhuǎn)換到文件名的)Alias, ScriptAlias, Redirect等指令進(jìn)行后續(xù)處理[原文:This flag is just a hack to enable post-processing of the output of RewriteRule directives, using Alias, ScriptAlias, Redirect, and other directives from various URI-to-filename translators.]。舉一個(gè)能說明其含義的例子: 如果要將/abc重寫為/def, 然后再使用mod_alias將/def轉(zhuǎn)換為/ghi,可以這樣:
RewriteRule ^/abc(.*) /def$1 [PT]
Alias /def /ghi
如果省略了PT標(biāo)記,雖然將uri=/abc/...重寫為filename=/def/...的部分運(yùn)作正常,但是后續(xù)的mod_alias在試圖將URI轉(zhuǎn)換到文件名時(shí)會遭遇失效。
注意:如果需要混合使用多個(gè)將URI轉(zhuǎn)換到文件名的模塊時(shí),就必須使用這個(gè)標(biāo)記。。此處混合使用mod_alias和mod_rewrite就是個(gè)典型的例子。
'qsappend|QSA'(追加查詢字符串)
此標(biāo)記強(qiáng)制重寫引擎在已有的替換字符串中追加一個(gè)查詢字符串,而不是簡單的替換。如果需要通過重寫規(guī)則在請求串中增加信息,就可以使用這個(gè)標(biāo)記。
'redirect|R [=code]'(強(qiáng)制重定向)
若Substitution以http://thishost[:thisport]/(使新的URL成為一個(gè)URI)開頭,可以強(qiáng)制性執(zhí)行一個(gè)外部重定 向。如果沒有指定code,則產(chǎn)生一個(gè)HTTP響應(yīng)碼302(臨時(shí)性移動)。如果需要使用在300-400范圍內(nèi)的其他響應(yīng)代碼,只需在此指定即可(或使 用下列符號名稱之一:temp(默認(rèn)), permanent, seeother)。使用它可以把規(guī)范化的URL反饋給客戶端,如將"/~"重寫為"/u/",或始終對/u/user加上斜杠,等等。
注意:在使用這個(gè)標(biāo)記時(shí),必須確保該替換字段是一個(gè)有效的URL。否則,它會指向一個(gè)無效的位置!并且要記住,此標(biāo)記本身只是對URL加上 http://thishost[:thisport]/前綴,重寫操作仍然會繼續(xù)進(jìn)行。通常,你還會希望停止重寫操作而立即重定向,那么就還需要使用 'L'標(biāo)記。
'skip|S=num'(跳過后繼規(guī)則)
此標(biāo)記強(qiáng)制重寫引擎跳過當(dāng)前匹配規(guī)則之后的num個(gè)規(guī)則。它可以模擬if-then-else結(jié)構(gòu):最后一個(gè)規(guī)則是then從句,而被跳過的skip=N個(gè)規(guī)則是else從句。注意:它和'chain|C'標(biāo)記是不同的!