綠(lǜ)色資(zī)源網:您身邊最放心的安全下載站! 最新軟(ruǎn)件|熱門排行(háng)|軟件分類|軟件專題|廠商大(dà)全

綠色資源網

技術教程
您的位(wèi)置:首頁服務器類Web服務器 → Apache的ReWrite的應用

Apache的ReWrite的應用

我要評論 2020/04/09 23:27:59 來源:綠色資源網 編輯:綠色資源站 [ ] 評論:0 點擊:459次

Apache的mod_rewrite是提供了強(qiáng)大URL操作的殺手級的模塊,可以實現幾乎(hū)所有你夢想的(de)URL操(cāo)作類(lèi)型,其(qí)代價是你必須接受其(qí)複雜性,因
為mod_rewrite的主要障礙就是初學(xué)者不容易理解和運用,即使(shǐ)是Apache專家有時也會發掘出(chū)mod_rewrite的新用途。

換句話說(shuō):對mod_rewrite,或者是打退堂鼓永不再(zài)用,或者(zhě)是喜歡它並一生受用。

ReWrite可以應用在以下(xià)方麵或者解(jiě)決以下問題:
URL的規劃
規範的URL
說明:
在有些網站服務器上,一個資源會擁有多個URL,在實際應用和發布中應該被使用的是規範的URL,其他的則是簡寫或者是內部使用的。無論(lùn)
用戶在請求中使用什(shí)麽形式的URL,他最終看見的都應該是規範的URL。

方案:
對所有的不規範的URL執行一個外部的HTTP重定向,以改變它在瀏覽器地址欄中的顯示(shì)及其後(hòu)繼(jì)的請求。下例中的規則(zé)集用規範的/u/user替
換/~user,並修正了/u/user所遺漏的後(hòu)綴的斜杠。

代碼(mǎ):
RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]

被移動過(guò)的DocumentRoot
說明(míng):
通常,網站服(fú)務器的DocumentRoot直接對應於URL"/",但(dàn)是,它常(cháng)常不是處於最(zuì)高一(yī)級,而可能隻是(shì)眾多數據池(chí)中的(de)一個實體(tǐ)。比如(rú),在
Intranet站點中,有/e/www/(WWW的主頁(yè))、/e/sww/ (Intranet的主頁)等等,而DocumentRoot指向了/e/www/,則必(bì)須保證此數據池中的所
有內嵌的圖片(piàn)和其他元素對後繼請求有效。

方案:
隻須重定向URL /到/e/www/即可。這個(gè)方案看起來很簡(jiǎn)單,但隻是有(yǒu)了mod_rewrite模塊的支持,它才(cái)簡單,因為傳統的URL Aliases機製(
由mod_alias及(jí)其相(xiàng)關模塊(kuài)提供)隻是作(zuò)了一個(gè)前綴匹配(pèi),DocumentRoot是一個對所有URL的前綴,因而無法實現這樣的重定向。而用
mod_rewrite的確很簡單:

代碼:
RewriteEngine on
RewriteRule ^/$ /e/www/ [R]

後(hòu)綴斜杠的問題
說(shuō)明:
每個網管對引用目錄後綴斜杠的問(wèn)題都有一(yī)本苦(kǔ)經(jīng),如果遺漏了,服務器會產生一個錯誤,因為如果請(qǐng)求(qiú)是/~quux/foo而不是/~quux/foo/
,服務器會去找(zhǎo)一個叫(jiào)foo的(de)文件,而它是一個(gè)目錄,所以就報(bào)錯了。事實上,大(dà)多數(shù)情況下,它自己會試圖修正這個錯誤,但(dàn)是有時候需(xū)
要你手工糾正,比如,在重寫了許多CGI腳本中的(de)複雜(zá)的URL以(yǐ)後。

方案:
解決這個(gè)微妙問題的方案是(shì)讓服(fú)務器自動添加後綴的斜杠。對此,必須使用一個外部的重定向,使瀏覽器(qì)正確地(dì)處理(lǐ)後繼的對諸如圖片的請
求。如果僅僅作一個內部的重(chóng)寫,可能隻對目錄頁麵有效,而(ér)對內(nèi)嵌有使用相對URL的圖片(piàn)的頁麵(miàn)則無效,因為瀏覽器有請求內嵌目標的可
能。比如,如果不用外部重定(dìng)向,/~quux/foo/index.html頁麵中對image.gif的請求,其結果將是/~quux/image.gif!。

所以,應該這樣寫:

代碼:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo$ foo/ [R]

又懶又瘋(fēng)狂的做(zuò)法是把(bǎ)這些(xiē)寫入其宿主目錄中的頂級.htaccess中,但是須注意,如此(cǐ)會帶來一些(xiē)處理上的開銷。

代碼:
RewriteEngine on
RewriteBase /~quux/
RewriteCond % -d
RewriteRule ^(.+[^/])$ $1/ [R]

集群(qún)網站(zhàn)的同類URL規劃
說明:
我們希望在(zài)一個Intranet集群(qún)網站中,對(duì)所有WWW服務器建立(lì)一(yī)個(gè)同類的一致(zhì)性的URL規劃,也就是(shì),所有的URL(對單個服(fú)務器來說,是本(běn)地
的依賴於此服務器的!)是獨立於服務器的!我們(men)需要的是一個具有獨立於服務器(qì)的一致性規劃(huá)的WWW名稱(chēng)空間,即,URL不需要包含正確的
物(wù)理的目標服務器,而由集群本身來自動定位物理(lǐ)的目標主機。

方案(àn):
首先,目(mù)標服務器的(de)信息來自(產生)於包含有用戶、組以及實體的外(wài)部地圖,其(qí)格式(shì)形如:

代碼:
user1 server_of_user1
user2 server_of_user2
: :

這些信息被存(cún)入map.xxx-to-host文件。其次,如果URL在(zài)一個服務器上無效(xiào),需要引導所有的服務器重定向URL

代碼:
/u/user/anypath
/g/group/anypath
/e/entity/anypath

RewriteRule ^/([uge])/([^/]+)/?$ /$1/$2/.www/
RewriteRule ^/([uge])/([^/]+)/([^.]+.+) /$1/$2/.www/$3\

移動宿主(zhǔ)目錄到(dào)不同的網站(zhàn)服務器
說明:
通常,許多網管在建立一個新的網(wǎng)站服務器(qì)時,都會有這樣(yàng)的要求(qiú):重定(dìng)向一個網站服務器上的所(suǒ)有宿主目錄到另一個(gè)網站(zhàn)服務器。

結構化(huà)的宿主目錄
說明:
一些擁有幾千個用戶的(de)網站通常都使用結構化的宿主目錄規劃,即,每個宿主目錄位於一個帶(dài)有特定前綴比如其用戶名的第(dì)一個字符的子目
錄下(xià)。那麽,/~foo/anypath代表/home/f/foo/.www/anypath,而/~bar/anypath代表/home/b/bar/.www/anypath。

方案:
可以使(shǐ)用(yòng)下列規則集來擴展~以達到上述目的。

代碼:
RewriteEngine on
RewriteRule ^/~(([a-z])[a-z0-9]+)(.*) /home/$2/$1/.www$3

文件係(xì)統的(de)重組
說明:
這是一個不(bú)加雕琢的例子:一個大量(liàng)使用針對目錄的規則集以實現平滑觀感,而從來(lái)不用調整數據結構的殺(shā)手級的(de)應(yīng)用。背景:net.sw從
1992年開始,存放了我收集的免費的有效的(de)Unix軟件包。它是我(wǒ)的(de)愛好也是我的工作,因為在(zài)學習計算機科學的同時,業餘時間還做了多年
的係統和(hé)網絡的(de)管理員。每周我都需要(yào)整理軟件,因而建立了一個層(céng)次很(hěn)深的目(mù)錄結構(gòu)來存(cún)放各種軟件(jiàn)包:

代碼:
drwxrwxr-x 2 netsw users 512 Aug 3 18:39 Audio/
drwxrwxr-x 2 netsw users 512 Jul 9 14:37 Benchmark/
drwxrwxr-x 12 netsw users 512 Jul 9 00:34 Crypto/
drwxrwxr-x 5 netsw users 512 Jul 9 00:41 Database/
drwxrwxr-x 4 netsw users 512 Jul 30 19:25 Dicts/
drwxrwxr-x 10 netsw users 512 Jul 9 01:54 Graphic/
drwxrwxr-x 5 netsw users 512 Jul 9 01:58 Hackers/
drwxrwxr-x 8 netsw users 512 Jul 9 03:19 InfoSys/
drwxrwxr-x 3 netsw users 512 Jul 9 03:21 Math/
drwxrwxr-x 3 netsw users 512 Jul 9 03:24 Misc/
drwxrwxr-x 9 netsw users 512 Aug 1 16:33 Network/
drwxrwxr-x 2 netsw users 512 Jul 9 05:53 Office/
drwxrwxr-x 7 netsw users 512 Jul 9 09:24 SoftEng/
drwxrwxr-x 7 netsw users 512 Jul 9 12:17 System/
drwxrwxr-x 12 netsw users 512 Aug 3 20:15 Typesetting/
drwxrwxr-x 10 netsw users 512 Jul 9 14:08 X11/

1996年7月,我決定通過一個漂(piāo)亮的(de)Web接口公開我的收藏(cáng)。“漂亮”是指提供一個(gè)接口(kǒu)以直接瀏覽整個目錄結構,同時不對這個結構做任何改
變 - 甚至也不在結構頂(dǐng)部放置CGI腳(jiǎo)本。為什麽呢?因為這個(gè)結構還要能夠被FTP訪問,而且我不希望其中有任何Web或者CGI的成分。

方案:
這個(gè)方案分為兩個部分:第一個部分,是用(yòng)於在空閑時間建立所有(yǒu)目錄頁麵的CGI腳本集。我把它們放在/e/netsw/.www/,如下:

代碼:
-rw-r--r-- 1 netsw users 1318 Aug 1 18:10 .wwwacl
drwxr-xr-x 18 netsw users 512 Aug 5 15:51 DATA/
-rw-rw-rw- 1 netsw users

關鍵詞:apache,web服務器

閱讀本文後您有什麽感想? 已有 人(rén)給出評價!

  • 101 歡迎喜歡
  • 2 白癡
  • 2 拜托(tuō)
  • 104 哇
  • 14 加油
  • 2 鄙(bǐ)視
免费人欧美成又黄又爽的视频丨一本色道久久88综合日韩精品丨国产专区日韩精品欧美色丨午夜无遮挡男女啪啪视频丨国产欧美日韩综合精品一区二区丨亚洲精品无码不卡在线播HE丨亚洲精品国产精品国自产观看丨日韩国产高清av不卡