国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - .htaccess rewrite 規則詳細說明

.htaccess rewrite 規則詳細說明

2021-11-03 18:04服務器知識網 服務器知識

用Apache虛擬主機的朋友很多,apache提供的.htaccess模塊可以為每個虛擬主機設定rewrite規則,這對網站SEO優化相當有用,同時也改善了用戶體驗

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

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

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

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

rewrite的語法格式:

 

復制代碼 代碼如下:

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

 

 

RewriteEngine On|Off

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

RewriteBase URL-path

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

RewriteCond TestString CondPattern [flags]

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

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

 

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

 

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

 

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

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

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

RewriteOptions Options

RewriteOptions指令為當前服務器級和目錄級的配置設置一些選項。 Option可以是下列值之一:

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

RewriteRule Pattern Substitution [flags]

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

Pattern是一個作用于當前URL的兼容perl的正則表達式。

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

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

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

 

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

一、防盜鏈功能

只這四行就實現了防盜鏈是不是很神奇^_^,編寫起來是不是又覺得復雜。

 

復制代碼 代碼如下:

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

 

二、網址規范化
這個是把所有二級域名都重定向到www.yourdomain.com的例子,現在看來是不是很簡單了?

 

復制代碼 代碼如下:

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

 

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

 

復制代碼 代碼如下:

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

 

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

 

復制代碼 代碼如下:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

‘env|E=VAR:VAL' (設置環境變量 environment variable)

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

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

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

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

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久91av | 激情综合网激情 | 国产精品一区在线观看 | 日韩一区二区影视 | 先锋av资源在线 | 麻豆美女 | 91视频导航| 亚洲尤物 | 精品国产乱码久久久久久丨区2区 | 亚洲天堂久久精品 | 国产精品久久久久无码av | 成人亚洲精品777777大片 | 日韩a视频| av成人在线观看 | 日韩在线中文字幕 | 欧美在线视频一区 | 国产成人一区二区啪在线观看 | 一卡二卡久久 | 日韩欧美国产一区二区 | 最近中文字幕 | 国产妇女乱码一区二区三区 | 国产日韩欧美一区 | 在线免费视频一区二区 | 精品一二三区在线观看 | 日本久久精品视频 | 黄网站涩免费蜜桃网站 | 黄色片在线播放 | 国产成人av在线 | 日韩免费在线观看视频 | 日韩精品影院 | 欧美综合成人网 | 中文字幕人成乱码在线观看 | 国产亚洲精品精品国产亚洲综合 | 亚洲一区二区久久 | 最好的2019中文大全在线观看 | 中文二区 | 在线日韩欧美 | 久久久av| 一区中文字幕 | 三级黄色小视频 | 中文在线a在线 |