欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.htaccess rewrite 規(guī)則詳細(xì)說明

 更新時間:2016年04月09日 12:48:35   投稿:mdxy-dxy  
用Apache虛擬主機的朋友很多,apache提供的.htaccess模塊可以為每個虛擬主機設(shè)定rewrite規(guī)則,這對網(wǎng)站SEO優(yōu)化相當(dāng)有用,同時也改善了用戶體驗

國內(nèi)的虛擬機一般不提供.htaccess功能(據(jù)我所知,discuz的主機好像提供此功能),而在國外主機中,.htaccess功能似乎是標(biāo)配,筆者的Blog架在MT上,支持.htaccess,每次看到一堆別人寫好了的.htaccess設(shè)置,很多命令都不甚了了,查看、修改起來很不方便,痛定思痛,潛心學(xué)習(xí)一下,知其所以然嘛~

學(xué)習(xí)前提:(不會的朋友要學(xué)習(xí)一下,才能更好的理解下面的文字呢)

Linux基礎(chǔ)(不會也沒事啦,寫個.htaccess沒必要大費周折啦,推薦:鳥哥私房菜linux基礎(chǔ))

正則表達(dá)式(Rewrite規(guī)則建立在正則的基礎(chǔ)之上,推薦:正則表達(dá)式30分鐘入門教程)

rewrite的語法格式:

復(fù)制代碼 代碼如下:

RewriteEngine On #要想rewrite起作用,必須要寫上哦
RewriteBase url-path #設(shè)定基準(zhǔn)目錄,例如希望對根目錄下的文件rewrtie,就是”/”
RewriteCond test-string condPattern #寫在RewriteRule之前,可以有一或N條,用于測試rewrite的匹配條件,具體怎么寫,后面會詳細(xì)說到。
RewriteRule Pattern Substitution #規(guī)則

RewriteEngine On|Off

RewriteEngine 用于開啟或停用rewrite功能。
rewrite configurations 不會自動繼承,因此你得給每個你想用 rewrite功能的虛擬主機目錄中加上這個指令。

RewriteBase URL-path

RewriteBase用于設(shè)定重寫的基準(zhǔn)URL。在下文中,你可以看見RewriteRule可以用于目錄級的配置文件中 (.htaccess)并在局部范圍內(nèi)起作用,即規(guī)則實際處理的只是剝離了本地路徑前綴的一部分。處理結(jié)束后,這個路徑會被自動地附著回去。默認(rèn)值 是”RewriteBase physical-directory-path”。
在對一個新的URL進(jìn)行替換時,此模塊必須把這個URL重新注入到服務(wù)器處理中。為此,它必須知道其對應(yīng)的URL前綴或者說URL基準(zhǔn)。通常,此前綴就是 對應(yīng)的文件路徑。但是,大多數(shù)網(wǎng)站URL不是直接對應(yīng)于其物理文件路徑的,因而一般不能做這樣的假定! 所以在這種情況下,就必須用RewriteBase指令來指定正確的URL前綴。
如果你的網(wǎng)站服務(wù)器URL不是與物理文件路徑直接對應(yīng)的,而又需要使用RewriteBase指令,則必須在每個對應(yīng)的.htaccess文件中指定 RewriteRule 。

RewriteCond TestString CondPattern [flags]

RewriteCond指令定義了一個規(guī)則的條件,即,在一個RewriteRule指令之前有一個或多個RewriteCond指令。 條件之后的重寫規(guī)則僅在當(dāng)前URI與pattern匹配并且符合這些條件的時候才會起作用。
TestString是一個純文本的字符串,但是還可以包含下列可擴展的成分:

RewriteRule反向引用: 引用方法是 $N  (0 <= N <= 9) 引用當(dāng)前(帶有若干RewriteCond指令的)RewriteRule中的 與pattern匹配的分組成分(圓括號!)。
RewriteCond反向引用: 引用方法是 %N  (1 <= N <= 9) 引用當(dāng)前若干RewriteCond條件中最后符合的條件中的分組成分(圓括號!)。
RewriteMap 擴展: 引用方法是 ${mapname:key|default}
服務(wù)器變量: 引用方法是 %{ NAME_OF_VARIABLE }  這個是我們最常使用到的功能
NAME_OF_VARIABLE具體數(shù)值見下表:

HTTP headers: connection & request:
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
server internals: system stuff: specials:
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ

這些都對應(yīng)于類似命名的HTTP MIME頭、Apache服務(wù)器的C變量以及Unix系統(tǒng)中的 struct tm字段,大多數(shù)都在其他的手冊或者CGI規(guī)范中有所講述。 而其中為mod_rewrite所特有的變量有:
IS_SUBREQ
如果正在處理的請求是一個子請求,它包含字符串”true”,否則就是”false”。 模塊為了解析URI中的附加文件,有可能會產(chǎn)生子請求。
API_VERSION
這是正在使用的httpd中(服務(wù)器和模塊之間內(nèi)部接口)的Apache模塊API的版本, 其定義位于include/ap_mmn.h中。此模塊版本對應(yīng)于正在使用的Apache的版本 (比如,在Apache 1.3.14的發(fā)行版中,這個值是19990320:10)。 通常,對它感興趣的是模塊的作者。
THE_REQUEST
這是由瀏覽器發(fā)送給服務(wù)器的完整的HTTP請求行。(比如, “GET /index.html HTTP/1.1″). 它不包含任何瀏覽器發(fā)送的附加頭信息。
REQUEST_URI
這是在HTTP請求行中所請求的資源。(比如上述例子中的”/index.html”.)
REQUEST_FILENAME
這是與請求相匹配的完整的本地文件系統(tǒng)的文件路徑名或描述.

CondPattern是條件pattern, 即, 一個應(yīng)用于當(dāng)前實例TestString的正則表達(dá)式, 即, TestString將會被計算然后與CondPattern匹配.

注意:CondPattern是一個兼容perl的正則表達(dá)式, 但是還有若干補充:

可以在pattern串中使用'!‘ 字符(驚嘆號)來實現(xiàn)匹配的反轉(zhuǎn)。

RewriteOptions Options

RewriteOptions指令為當(dāng)前服務(wù)器級和目錄級的配置設(shè)置一些選項。 Option可以是下列值之一:

inherit
此值強制當(dāng)前配置可以繼承其父配置。 在虛擬主機級配置中,它意味著主服務(wù)器的映射表、條件和規(guī)則可以被繼承。 在目錄級配置中,它意味著其父目錄的.htaccess中的條件和規(guī)則可以被繼承。
MaxRedirects=number
為了避免目錄級RewriteRule的無休止的內(nèi)部重定向, 在此類重定向和500內(nèi)部服務(wù)器錯誤次數(shù)達(dá)到一個最大值的時候, mod_rewrite會停止對此請求的處理。 如果你確實需要對每個請求允許大于10次的內(nèi)部重定向,可以增大這個值。

RewriteRule Pattern Substitution [flags]

RewriteRule指令是重寫引擎的根本。此指令可以多次使用。 每個指令定義一個簡單的重寫規(guī)則。這些規(guī)則的定義順序尤為重要, 因為,在運行時刻,規(guī)則是按這個順序逐一生效的.

Pattern是一個作用于當(dāng)前URL的兼容perl的正則表達(dá)式。

此外,還可以使用否字符(‘!‘)的pattern前綴,以實現(xiàn)pattern的反轉(zhuǎn)。但是,需要注意的是使用否字符以反轉(zhuǎn)pattern時,pattern中不能使用分組的通配成分;即$N。

重寫規(guī)則中的Substitution是, 當(dāng)原始URL與Pattern相匹配時,用以替代(或替換)的字符串。除了純文本,還可以使用

$N 反向引用RewriteRule的pattern
%N 反向引用最后匹配的RewriteCond pattern
規(guī)則條件測試字符串中(%{VARNAME})的服務(wù)器變量
映射函數(shù)調(diào)用(${mapname:key|default})

下面給出幾個完整的例子供各位參考:

一、防盜鏈功能

只這四行就實現(xiàn)了防盜鏈?zhǔn)遣皇呛苌衿鎊_^,編寫起來是不是又覺得復(fù)雜。

復(fù)制代碼 代碼如下:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

二、網(wǎng)址規(guī)范化
這個是把所有二級域名都重定向到www.yourdomain.com的例子,現(xiàn)在看來是不是很簡單了?

復(fù)制代碼 代碼如下:

Options +FollowSymLinks
rewriteEngine on
rewriteCond %{http_host} ^yourdomain.com [NC]
rewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]

三、臨時錯誤頁面
當(dāng)你的網(wǎng)站在升級、修改的時候,你最好讓訪客轉(zhuǎn)到指定的頁面,而不是沒做完的頁面或者是錯誤頁。

復(fù)制代碼 代碼如下:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^123.123.123.123
RewriteRule $ /error.html [R=302,L]

四、重定向RSS地址到FeedSky
除了可以更改模板里的RSS地址外,.htaccess也能實現(xiàn)RSS地址的更改,并更加方便。

復(fù)制代碼 代碼如下:

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !FeedSky [NC]
RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feed.feedsky.com/yours

附錄:flags

‘redirect|R [=code]‘ (強制重定向 redirect)

以http://thishost[:thisport]/(使新的URL成為一個URI) 為前綴的Substitution可以強制性執(zhí)行一個外部重定向。 如果code沒有指定,則產(chǎn)生一個HTTP響應(yīng)代碼302(臨時性移動)。 如果需要使用在300-400范圍內(nèi)的其他響應(yīng)代碼,只需在此指定這個數(shù)值即可, 另外,還可以使用下列符號名稱之一: temp (默認(rèn)的), permanent, seeother. 用它可以把規(guī)范化的URL反饋給客戶端,如, 重寫“/~”為 “/u/”,或?qū)?u/user加上斜杠,等等。 注意: 在使用這個標(biāo)記時,必須確保該替換字段是一個有效的URL! 否則,它會指向一個無效的位置! 并且要記住,此標(biāo)記本身只是對URL加上 http://thishost[:thisport]/的前綴,重寫操作仍然會繼續(xù)。 通常,你會希望停止重寫操作而立即重定向,則還需要使用'L'標(biāo)記.

‘forbidden|F' (強制URL為被禁止的 forbidden)

強制當(dāng)前URL為被禁止的,即,立即反饋一個HTTP響應(yīng)代碼403(被禁止的)。 使用這個標(biāo)記,可以鏈接若干RewriteConds以有條件地阻塞某些URL。

‘gone|G' (強制URL為已廢棄的 gone)

強制當(dāng)前URL為已廢棄的,即,立即反饋一個HTTP響應(yīng)代碼410(已廢棄的)。 使用這個標(biāo)記,可以標(biāo)明頁面已經(jīng)被廢棄而不存在了.

‘proxy|P' (強制為代理 proxy)

此標(biāo)記使替換成分被內(nèi)部地強制為代理請求,并立即(即, 重寫規(guī)則處理立即中斷)把處理移交給代理模塊。 你必須確保此替換串是一個有效的(比如常見的以 http://hostname開頭的)能夠為Apache代理模塊所處理的URI。 使用這個標(biāo)記,可以把某些遠(yuǎn)程成分映射到本地服務(wù)器名稱空間, 從而增強了ProxyPass指令的功能。 注意: 要使用這個功能,代理模塊必須編譯在Apache服務(wù)器中。 如果你不能確定,可以檢查“httpd -l”的輸出中是否有mod_proxy.c。 如果有,則mod_rewrite可以使用這個功能; 如果沒有,則必須啟用mod_proxy并重新編譯“httpd”程序。

‘last|L' (最后一個規(guī)則 last)

立即停止重寫操作,并不再應(yīng)用其他重寫規(guī)則。 它對應(yīng)于Perl中的last命令或C語言中的break命令。 這個標(biāo)記可以阻止當(dāng)前已被重寫的URL為其后繼的規(guī)則所重寫。 舉例,使用它可以重寫根路徑的URL(‘/')為實際存在的URL, 比如, ‘/e/www/'.

‘next|N' (重新執(zhí)行 next round)

重新執(zhí)行重寫操作(從第一個規(guī)則重新開始). 這時再次進(jìn)行處理的URL已經(jīng)不是原始的URL了,而是經(jīng)最后一個重寫規(guī)則處理的URL。 它對應(yīng)于Perl中的next命令或C語言中的continue命令。 此標(biāo)記可以重新開始重寫操作,即, 立即回到循環(huán)的頭部。 但是要小心,不要制造死循環(huán)!

‘chain|C' (與下一個規(guī)則相鏈接 chained)

此標(biāo)記使當(dāng)前規(guī)則與下一個(其本身又可以與其后繼規(guī)則相鏈接的, 并可以如此反復(fù)的)規(guī)則相鏈接。 它產(chǎn)生這樣一個效果: 如果一個規(guī)則被匹配,通常會繼續(xù)處理其后繼規(guī)則, 即,這個標(biāo)記不起作用;如果規(guī)則不能被匹配, 則其后繼的鏈接的規(guī)則會被忽略。比如,在執(zhí)行一個外部重定向時, 對一個目錄級規(guī)則集,你可能需要刪除“.www” (此處不應(yīng)該出現(xiàn)“.www”的)。

‘type|T=MIME-type' (強制MIME類型 type)

強制目標(biāo)文件的MIME類型為MIME-type。 比如,它可以用于模擬mod_alias中的ScriptAlias指令, 以內(nèi)部地強制被映射目錄中的所有文件的MIME類型為“application/x-httpd-cgi”.

‘nosubreq|NS' (僅用于不對內(nèi)部子請求進(jìn)行處理 no internal sub-request)

在當(dāng)前請求是一個內(nèi)部子請求時,此標(biāo)記強制重寫引擎跳過該重寫規(guī)則。 比如,在mod_include試圖搜索可能的目錄默認(rèn)文件(index.xxx)時, Apache會內(nèi)部地產(chǎn)生子請求。對子請求,它不一定有用的,而且如果整個規(guī)則集都起作用, 它甚至可能會引發(fā)錯誤。所以,可以用這個標(biāo)記來排除某些規(guī)則。 根據(jù)你的需要遵循以下原則: 如果你使用了有CGI腳本的URL前綴,以強制它們由CGI腳本處理, 而對子請求處理的出錯率(或者開銷)很高,在這種情況下,可以使用這個標(biāo)記。

‘nocase|NC' (忽略大小寫 no case)

它使Pattern忽略大小寫,即, 在Pattern與當(dāng)前URL匹配時,'A-Z' 和'a-z'沒有區(qū)別。

‘qsappend|QSA' (追加請求串 query string append)

此標(biāo)記強制重寫引擎在已有的替換串中追加一個請求串,而不是簡單的替換。 如果需要通過重寫規(guī)則在請求串中增加信息,就可以使用這個標(biāo)記。

‘noescape|NE' (在輸出中不對URI作轉(zhuǎn)義 no URI escaping)

此標(biāo)記阻止mod_rewrite對重寫結(jié)果應(yīng)用常規(guī)的URI轉(zhuǎn)義規(guī)則。 一般情況下,特殊字符(如'%', ‘$', ‘;'等)會被轉(zhuǎn)義為等值的十六進(jìn)制編碼。 此標(biāo)記可以阻止這樣的轉(zhuǎn)義,以允許百分號等符號出現(xiàn)在輸出中,如: RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
可以使'/foo/zed'轉(zhuǎn)向到一個安全的請求'/bar?arg=P1=zed'.

‘passthrough|PT' (移交給下一個處理器 pass through)

此標(biāo)記強制重寫引擎將內(nèi)部結(jié)構(gòu)request_rec中的uri字段設(shè)置為 filename字段的值,它只是一個小修改,使之能對來自其他URI到文件名翻譯器的 Alias,ScriptAlias, Redirect 等指令的輸出進(jìn)行后續(xù)處理。舉一個能說明其含義的例子: 如果要通過mod_rewrite的重寫引擎重寫/abc為/def, 然后通過mod_alias使/def轉(zhuǎn)變?yōu)?ghi,可以這樣: RewriteRule ^/abc(.*) /def$1 [PT]
Alias /def /ghi
如果省略了PT標(biāo)記,雖然mod_rewrite運作正常, 即, 作為一個使用API的URI到文件名翻譯器, 它可以重寫uri=/abc/…為filename=/def/…, 但是,后續(xù)的mod_alias在試圖作URI到文件名的翻譯時,則會失效。
注意: 如果需要混合使用不同的包含URI到文件名翻譯器的模塊時, 就必須使用這個標(biāo)記?;旌鲜褂胢od_alias和mod_rewrite就是個典型的例子。

For Apache hackers
如果當(dāng)前Apache API除了URI到文件名hook之外,還有一個文件名到文件名的hook, 就不需要這個標(biāo)記了! 但是,如果沒有這樣一個hook,則此標(biāo)記是唯一的解決方案。 Apache Group討論過這個問題,并在Apache 2.0 版本中會增加這樣一個hook。

'skip|S=num' (跳過后繼的規(guī)則 skip)

此標(biāo)記強制重寫引擎跳過當(dāng)前匹配規(guī)則后繼的num個規(guī)則。 它可以實現(xiàn)一個偽if-then-else的構(gòu)造: 最后一個規(guī)則是then從句,而被跳過的skip=N個規(guī)則是else從句. (它和'chain|C'標(biāo)記是不同的!)

‘env|E=VAR:VAL' (設(shè)置環(huán)境變量 environment variable)

此標(biāo)記使環(huán)境變量VAR的值為VAL, VAL可以包含可擴展的反向引用的正則表達(dá)式$N和%N。 此標(biāo)記可以多次使用以設(shè)置多個變量。 這些變量可以在其后許多情況下被間接引用,但通常是在XSSI (via or CGI (如 $ENV{‘VAR'})中, 也可以在后繼的RewriteCond指令的pattern中通過%{ENV:VAR}作引用。 使用它可以從URL中剝離并記住一些信息。

‘cookie|CO=NAME:VAL:domain[:lifetime[:path]]' (設(shè)置cookie)

它在客戶端瀏覽器上設(shè)置一個cookie。 cookie的名稱是NAME,其值是VAL。 domain字段是該cookie的域,比如'.apache.org', 可選的lifetime是cookie生命期的分鐘數(shù), 可選的path是cookie的路徑。

深入閱讀:http://oss.org.cn/man/newsoft/ApacheManual/mod/mod_rewrite.html

相關(guān)文章

  • Linux內(nèi)核中的設(shè)計模式之全面理解與示例代碼

    Linux內(nèi)核中的設(shè)計模式之全面理解與示例代碼

    這篇文章主要介紹了Linux內(nèi)核中的設(shè)計模式之全面理解與示例代碼,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Ubuntu Linux系統(tǒng)下輕松架設(shè)nginx+php服務(wù)器應(yīng)用

    Ubuntu Linux系統(tǒng)下輕松架設(shè)nginx+php服務(wù)器應(yīng)用

    一直一來,在Ubuntu Linux系統(tǒng)下調(diào)試php的web程序都是使用的apache+php+mysql的開發(fā)環(huán)境,近來看到網(wǎng)上大家都在討論nginx架設(shè)的web服務(wù)器,據(jù)說性能比apache要高上十幾倍。所以自己想也想嘗嘗鮮,在自己的電腦上先裝一個體驗一下!
    2009-08-08
  • 總結(jié)Centos7系統(tǒng)加固知識點

    總結(jié)Centos7系統(tǒng)加固知識點

    本篇文章給大家詳細(xì)介紹了LINUX中Centos7系統(tǒng)加固的相關(guān)知識點,如果大家對此有需要跟著學(xué)習(xí)下吧。
    2018-02-02
  • PHP程序員玩轉(zhuǎn)Linux系列 lnmp環(huán)境搭建

    PHP程序員玩轉(zhuǎn)Linux系列 lnmp環(huán)境搭建

    這篇文章主要為大家詳細(xì)介紹了PHP程序員玩轉(zhuǎn)Linux系列文章,lnmp環(huán)境搭建教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Linux桌面的4種掃描工具

    Linux桌面的4種掃描工具

    今天小編就為大家分享一篇關(guān)于Linux桌面的4種掃描工具的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • linux DMA接口知識點詳解

    linux DMA接口知識點詳解

    在本篇文章里小編給大家整理了關(guān)于linux DMA接口知識點內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • 15分鐘并行神器gnu parallel入門指南

    15分鐘并行神器gnu parallel入門指南

    GNU Parallel是一個shell工具,為了在一臺或多臺計算機上并行的執(zhí)行計算任務(wù),這篇文章主要介紹了15分鐘并行神器gnu parallel入門指南,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Linux如何啟動SELinux

    Linux如何啟動SELinux

    這篇文章主要介紹了Linux如何啟動SELinux問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 2018值得選用的五個Linux服務(wù)器發(fā)行版

    2018值得選用的五個Linux服務(wù)器發(fā)行版

    Linux發(fā)行版很少互相復(fù)制。從以下5個最流行的Linux服務(wù)器發(fā)行版來看,這一點很明顯,它們各有不同的優(yōu)缺點,這篇文章給大家?guī)砹?018值得選用的五個Linux服務(wù)器發(fā)行版,需要的朋友參考下吧
    2018-01-01
  • 使用Python生成Shell命令,批量執(zhí)行程序代碼解析

    使用Python生成Shell命令,批量執(zhí)行程序代碼解析

    這篇文章主要介紹了使用Python生成Shell命令,批量執(zhí)行程序代碼解析,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01

最新評論