人妻丰满熟妇AV无码片,岛国AV无码免费无禁网站,丰满岳乱妇一区二区三区,男插女高潮一区二区

apache url重寫(RewriteCond|RewriteRule)詳解

技術(shù)分享 2019-10-01 00:00:00
默認(rèn)情況下 RewriteCond 只應(yīng)用到 其緊跟著的 RewriteRule。


RewriteCondSyntax: RewriteCond TestString CondPattern   RewriteCond指令定義一條規(guī)則條件。在一條RewriteRule指令前面可能會有一條或多條RewriteCond指令,只有當(dāng)自身的模板(pattern)匹配成功且這些條件也滿足時規(guī)則才被應(yīng)用于當(dāng)前URL處理。  TestString是一個字符串,除了包含普通的字符外,還可以包括下列的可擴展結(jié)構(gòu):
1. $N,RewriteRule后向引用,其中(0 <= N <= 9)  $N引用緊跟在RewriteCond后面的RewriteRule中模板中的括號中的模板在當(dāng)前URL中匹配的數(shù)據(jù)。
2. %N,RewriteCond后向引用,其中(0 <= N <= 9)  %N引用最后一個RewriteCond的模板中的括號中的模板在當(dāng)前URL中匹配的數(shù)據(jù)。
3. ${mapname:key|default},RewriteMap擴展.具體參見RewriteMap
4. %{ NAME_OF_VARIABLE } ,服務(wù)器變量。變量的名字如下表(分類顯示)
5.
specials:
說明
API_VERSION
Apache與模塊間的接口的版本號
THE_REQUEST
客戶端發(fā)送到來的HTTP請求行的整行信息,不含其它的頭字段信息,如("GET /index.html HTTP/1.1")
REQUEST_URI
HTTP請求行中請求的資源
REQUEST_FILENAME
請求中對應(yīng)的服務(wù)器本地文件系統(tǒng)中全路徑文件名
IS_SUBREQ
根據(jù)是否為SubRequest,分別值為”true”或”false”
6. 特別說明:
o SCRIPT_FILENAME和REQUEST_FILENAME變量含有相同的值,也就是Apache服務(wù)器內(nèi)部數(shù)據(jù)結(jié)構(gòu)request_rec的filename字段的值。第一個變量是一個CGI變量,而第二個則與REQUEST_URI(含有request_rec數(shù)據(jù)結(jié)構(gòu)中uri字段的值)保持一致。
o %{ENV:variable}中的variable可以是任何環(huán)境變量的名字。對其值的查找,先通過Apache內(nèi)部的數(shù)據(jù)結(jié)構(gòu),(如找不到)再在Apache服務(wù)器進(jìn)程中通過getenv()查找。
o %{HTTP:header}中的header可以是任何HTTP MIME-header的名字,其值通過查找HTTP請求信息而得。
o %{LA-U:variable} 用來引用后續(xù)API階段中定義的、當(dāng)前還不知道的值,具體實現(xiàn)是通過執(zhí)行一個基于URL的內(nèi)部的sub-request來決定的variable的最終的值。例如,假如你想在服務(wù)器范圍內(nèi)利用REMOTE_USER的值來完成重寫,但這個值是在驗證階段設(shè)置的,而驗證階段是在URL轉(zhuǎn)換階段的后面。從另一方面講,由于mod_rewrite在修補(fixup)API階段進(jìn)行目錄范圍的重寫,而修補階段在驗證階段的后面,所以此時只要用%{REMOTE_USER}就可以取得該值了。
o %{LA-F:variable},執(zhí)行一個基于文件名字(filename)的內(nèi)部sub-request來決定variable的最終的值。大多數(shù)時間內(nèi),這和LA-U相同。

  CondPattern是一個條件模板,也就是說,是一個擴展正則式(extended regular expression),用與跟TestString進(jìn)行匹配。作為一個標(biāo)準(zhǔn)的擴展正則式,CondPattern有以下補充:
1. 可以在模板串前增加一個!前綴,以用表示不匹配模板。但并不是所有的test都可以加!前綴。
2. CondPattern中可以使用以下特殊變量:
o 'o '>CondPattern' (大于)將condPattern當(dāng)作一個普通字符串,將它和TestString進(jìn)行比較,當(dāng)TestString 的字符大于CondPattern為真.
o '=CondPattern' (等于)將condPattern當(dāng)作一個普通字符串,將它和TestString進(jìn)行比較,當(dāng)TestString 與CondPattern完全相同時為真.如果CondPattern只是 "" (兩個引號緊挨在一起) 此時需TestString 為空字符串方為真.
o '-d' (是否為目錄)將testString當(dāng)作一個目錄名,檢查它是否存在以及是否是一個目錄.
o '-f' (是否是regular file)將testString當(dāng)作一個文件名,檢查它是否存在以及是否是一個regular文件.
o '-s' (是否為長度不為0的regular文件)將testString當(dāng)作一個文件名,檢查它是否存在以及是否是一個長度大于0的regular文件
o '-l' (是否為symbolic link)將testString當(dāng)作一個文件名,檢查它是否存在以及是否是一個 symbolic link.
o '-F' (通過subrequest來檢查某文件是否可訪問)檢查TestString是否是一個合法的文件,而且通過服務(wù)器范圍內(nèi)的當(dāng)前設(shè)置的訪問控制進(jìn)行訪問。這個檢查是通過一個內(nèi)部subrequest完成的, 因此需要小心使用這個功能以降低服務(wù)器的性能。
o '-U' (通過subrequest來檢查某個URL是否存在)檢查TestString是否是一個合法的URL,而且通過服務(wù)器范圍內(nèi)的當(dāng)前設(shè)置的訪問控制進(jìn)行訪問。這個檢查是通過一個內(nèi)部subrequest完成的, 因此需要小心使用這個功能以降低服務(wù)器的性能。
  是第三個參數(shù),多個標(biāo)志之間用逗號分隔。
1. 'nocase|NC' (不區(qū)分大小寫)  在擴展后的TestString和CondPattern中,比較時不區(qū)分文本的大小寫。注意,這個標(biāo)志對文件系統(tǒng)和subrequest檢查沒有影響.
2. 'ornext|OR' (建立與下一個條件的或的關(guān)系)  默認(rèn)的情況下,二個條件之間是AND的關(guān)系,用這個標(biāo)志將關(guān)系改為OR。例如: RewriteCond %{REMOTE_HOST} ^host1.* RewriteCond %{REMOTE_HOST} ^host2.* RewriteCond %{REMOTE_HOST} ^host3.*RewriteRule ...如果沒有標(biāo)志,需要寫三個條件/規(guī)則.
例子:根據(jù)客戶端瀏覽器的不同,返回不同的首頁面。RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*RewriteRule ^/$ /homepage.max.html RewriteCond %{HTTP_USER_AGENT} ^Lynx.*RewriteRule ^/$ /homepage.min.html RewriteRule ^/$ /homepage.std.html
當(dāng)你在地址欄里輸入 sina.com.cn google.cn


看看有什么變化?是不是會自動跳轉(zhuǎn)到 www.sina.com.cn www.google.cn


這一技術(shù)通過apache的rewrite可以實現(xiàn),當(dāng)然你得把 不帶www的域名指向你服務(wù)器的IP


要是虛擬主機的話,得在viralhost段加入 ServerAlias xxx.com


然后打開重寫引擎功能


RewriteEngine On


能過rewritecond判斷主機名是否帶www


RewriteCond %{HTTP_HOST} ^xxx/.com$


然后來一條


RewriteRule ^/(.*)$ http://www.xxx.com/$1


OK,重起apache,現(xiàn)在在瀏覽器中輸入 xxx.com 看看是不是自動變成了www.xxx.com了呢。


重新整理一下就是:


RewriteEngine On


RewriteCond %{HTTP_HOST} ^xxx/.com$


RewriteRule ^/(.*)$ http://www.xxx.com/$1




用.htaccess文件的話:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mydomain.com

RewriteRule ^(.*)$ http://www.mydomain.com/$1

咨詢小瓶科技
咨詢我們
頂部