国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > Apache > 正文

Apache重寫規(guī)則的常見應(yīng)用及實(shí)例說明

2024-08-27 18:29:00
字體:
供稿:網(wǎng)友

本文旨在提供如何用apache重寫規(guī)則來解決一些常見的url重寫方法的問題,通過常見的實(shí)例給用戶一些使用重寫規(guī)則的基本方法和線索。

一、為什么需要用重寫規(guī)則

網(wǎng)站的生命在于不斷地進(jìn)行更新和維護(hù),根據(jù)業(yè)務(wù)發(fā)展的需求轉(zhuǎn)移服務(wù)器進(jìn)行維護(hù)、重新組織目錄結(jié)構(gòu)、變換url甚至改變到新的域名等情況是經(jīng)常發(fā)生的。為了讓客戶不會因此受到任何影響,最好的方法就是使用apache rewrite rule(重寫規(guī)則)。

二、重寫規(guī)則的作用范圍

1.使用在apache主配置文件httpd.conf中。

2.使用在httpd.conf里定義的虛擬主機(jī)配置中。

3.使用在基本目錄的跨越配置文件.htaccess中。

三、重寫規(guī)則的應(yīng)用條件

當(dāng)用戶的web請求最終被導(dǎo)向到某臺web服務(wù)器的apache守護(hù)進(jìn)程,apache根據(jù)配置文件判斷該請求是主配置還是虛擬主機(jī),再根據(jù)用戶在瀏覽器中請求的url來匹配重寫規(guī)則,并且根據(jù)實(shí)際的請求路徑匹配.htaccess中的重寫規(guī)則,最后把請求的內(nèi)容傳回給用戶。該響應(yīng)可能有2種。

1.將請求內(nèi)容外部重定向(redirect)到另一個(gè)url

讓瀏覽器再次以新的url發(fā)出請求(r=301或者r=302,臨時(shí)的或是永久的重定向)。

例如,一個(gè)網(wǎng)站有正規(guī)的url和別名url,對別名url進(jìn)行重定向到正規(guī)url,或者網(wǎng)站改換成了新的域名,則把舊的域名重定向到新的域名。

2.由apache內(nèi)部子請求代理產(chǎn)生新的內(nèi)容送回給客戶[p,l]

這是apache內(nèi)部根據(jù)重寫后的url,通過代理模塊請求內(nèi)容并將最終內(nèi)容送回給客戶,客戶端瀏覽器不必再次請求,瀏覽器中的url不會被重寫,但實(shí)際內(nèi)容由apache根據(jù)重寫規(guī)則后的url生成。

例如,在公司防火墻上運(yùn)行的apache啟動這種代理重寫規(guī)則,代理對內(nèi)部網(wǎng)段上的web服務(wù)器的請求。

四、重寫規(guī)則怎樣工作

我們假定在編譯apache時(shí)已經(jīng)把mod_rewrite編譯成模塊,確信您的httpd.conf中有l(wèi)oadmodule rewrite_module libexec/mod_rewrite.so,并且在addmodule中有addmodule mod_rewrite.c,則可以使用重寫規(guī)則。

當(dāng)外部請求到達(dá)apache,apache調(diào)用重寫規(guī)則中的定義來重寫由用戶瀏覽器指定請求的url,最后被重寫的url如果是重定向,則送交瀏覽器做再一次請求;如果是代理則把重寫后的url交給代理模塊請求最終的內(nèi)容(content),最后把內(nèi)容送回給瀏覽器。

五、何時(shí)使用.htaccess中的重寫規(guī)則定義

假如您對網(wǎng)站內(nèi)容所在的服務(wù)器沒有管理員權(quán)限,或者您的網(wǎng)站內(nèi)容放在isp的服務(wù)器上托管,無法改寫主配置文件,但是您對web站點(diǎn)內(nèi)容所在的目錄有寫權(quán)限,則可以設(shè)置自己的.htaccess文件達(dá)到同樣的目的。但您需要確定主配置文件中對您的網(wǎng)站所在的目錄定義了下面的內(nèi)容,否則您的.htaccess不會工作。

< directory /usr/local/apache/htdocs/www.abc.com> options indexes followsymlinks  allowoverride all  < /directory >

六、應(yīng)用舉例

假定apache被編譯安裝在主機(jī)192.168.1.56的/usr/local/apache目錄下面,同時(shí)編譯了重寫和代理模塊。

1.隱藏apache下的某個(gè)目錄,使得對該目錄的任何請求都重定向到另一個(gè)文件

(1)httpd.conf的實(shí)現(xiàn)方法

我們將下面的部分放到/usr/local/apache/conf/httpd.conf中。

< directory "/usr/local/apache/htdocs/manual/"> options indexes followsymlinks  allowoverride all rewriteengine on rewritebase /  rewriterule ^(.*)$ index.html.en [r=301] < /directory >

注: “rewriteengine on”為重寫引擎開關(guān),如果設(shè)為“off”,則任何重寫規(guī)則定義將不被應(yīng)用,該開關(guān)的另一用處就是如果為了臨時(shí)去掉重寫規(guī)則,可以將引擎開關(guān)設(shè)為“off”再重新啟動apache即可,不必將其中的各條重寫規(guī)則注釋掉。

“rewritebase /”的作用是如果在下面的rewriterule定義中被重寫后的部分(此處為文件名index.html.en)前面沒有“/”,則表明是相對目錄,相對于這個(gè)rewritebase后面的定義也就是/usr/local/apache/htdocs/index.html.en,否則,如果此處沒有“rewritebase /”這一項(xiàng),則被重寫成http://192.168.1.56/usr/local/apache/htdocs/manual/index.html.en,顯然是不正確的。

我們也可以不用“rewritebase /”,而是將其改為如下部分。

rewriteengine on rewriterule ^(.*)$ /index.html.en [r=301]

或者更改為:

rewriteengine on  rewriterule ^(.*)$ http://192.168.1.56/index.html.en [r=301]

(2).htaccess的實(shí)現(xiàn)方法

我們將下面的部分放到httpd.conf中。

< directory "/usr/local/apache/htdocs/manual/"> options indexes followsymlinks  allowoverride all < /directory >

然后將下面的部分放到/usr/local/apache/htdocs/manual/.htaccess中。

rewriteengine on rewritebase / rewriterule ^(.*)$ index.html.en [r=301]

注: 對文件.htaccess所做的任何改動不需要重啟動apache。

您還可以利用.htaccess方案將這個(gè)manual目錄重定向到用戶jephe自己的主目錄。

rewriteengine on  rewritebase /~jephe/ rewriterule ^(.*)$ $1 [r=301]

這樣,對manual目錄下任何文件的請求被重定向到~jephe目錄下相同文件的請求。

2.將http://www.username.domain.com對于username的主頁請求轉(zhuǎn)換為對http://www.domain.com/username的請求

對于http/1.1的請求包括一個(gè)host: http頭,我們能用下面的規(guī)則集重寫

http://www.username.domain .com/anypath到/home/username/anypath。  rewriteengine on  rewritecond %{http_host} ^www.[^.] .host.com$ rewriterule ^(. ) %{http_host}$1 [c]  rewriterule ^www.([^.] ).host.com(.*) /home/$1$2

注: “rewritecond”表明是條件重寫規(guī)則,當(dāng)滿足后面定義的條件后才會應(yīng)用下面的重寫規(guī)則,“rewritecond”有各種變量,請查閱相關(guān)文檔。

3.防火墻上的重寫規(guī)則代理內(nèi)部網(wǎng)段上服務(wù)器的請求

namevirtualhost 1.2.3.4  < virtualhost 1.2.3.4:80 > servername www.domain.com  rewriteengine on  proxyrequest on rewriterule ^/(.*)$ http://192.168.1.3/$1 [p,l] < /virtualhost >

注: 當(dāng)外部瀏覽器請求http://www.domain.com時(shí),將被解析到ip地址1.2.3.4,apache交由mod_rewrite處理,轉(zhuǎn)換成http://192.168.1.3/$1后再交由代理模塊mod_proxy,得到內(nèi)容后傳送回用戶的瀏覽器。

4.基本預(yù)先設(shè)定的轉(zhuǎn)換map表進(jìn)行重寫rewritemap

轉(zhuǎn)換http://www.domain.com/{countrycode}/anypath到map表中規(guī)定的url,前面是虛擬主機(jī)中的定義。

rewritelog /usr/local/apache/logs/rewrite.log  rewriteloglevel 9  rewriteengine on proxyrequest on rewritemap sitemap txt:/usr/local/apache/conf/rewrite.map rewriterule ^/([^/] ) /(.*)$ http://%{remote_host}::$1 [c]  rewriterule (.*)::([a-z] )$ ${sitemap:$2|http://h.i.j.k/} [r=301,l]

文件/usr/local/apache/conf/rewrite.map的內(nèi)容如下:

sg http://a.b.c.d/ sh http://e.f.g.h/

注: 當(dāng)用戶請求http://www.domain.com/sg/anypath時(shí)被重寫為http://a.b.c.d/anypath。當(dāng)需要調(diào)試時(shí)請用rewritelog和 rewriteloglevel 9聯(lián)合,9為最大,即得到最多的調(diào)試信息;最小為1,表示得到最少的調(diào)試信息;默認(rèn)為0,表示沒有調(diào)試信息。

sitemap的語法是${sitemap: lookupkey | defaultvalue},有些書上把$寫成了%是錯誤的。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 天门市| 鹤岗市| 海林市| 龙井市| 荔浦县| 曲周县| 兴隆县| 彭州市| 孝义市| 改则县| 克拉玛依市| 陆河县| 长子县| 南充市| 依兰县| 宜州市| 云阳县| 科尔| 隆安县| 论坛| 新泰市| 湘乡市| 眉山市| 太康县| 蓬安县| 宁乡县| 江油市| 寿宁县| 新野县| 团风县| 黄梅县| 兴和县| 都江堰市| 宣城市| 密山市| 昌宁县| 莆田市| 临洮县| 蚌埠市| 安溪县| 长顺县|