摘要:使用詳解確認(rèn)是否加載了模塊啟用修改為與學(xué)習(xí)需要重點(diǎn)了解它的三個(gè)核心,,。和是上下對應(yīng)的關(guān)系。該字符串表明了訪問該頁面的用戶代理的信息。當(dāng)前請求的文件名寫法和規(guī)則是配合一起使用,可以說,是成功匹配后的執(zhí)行結(jié)果,所以,它是很重要的。
Rewrite的需求
在用Apache做web服務(wù)器的時(shí)候,有的時(shí)候需要將輸入的URL轉(zhuǎn)換成另一個(gè)URL這種需求。比如用CodeIgniter框架開發(fā)web應(yīng)用的時(shí)候,我們訪問的所有路徑都要經(jīng)過index.php,由這個(gè)index.php做統(tǒng)一路由,訪問地址如下:
example.com/index.php/news/article/my_article
每次訪問都帶著index.php,實(shí)在太多余了,我們想要一個(gè)干凈的地址如下:
example.com/news/article/my_article
這時(shí)你的 Apache 服務(wù)器需要啟用mod_rewrite,然后簡單的通過一個(gè) .htaccess 文件再加上一些簡單的規(guī)則就可以移除URL中的 index.php 了。下面是這個(gè)文件的一個(gè)例子, 其中使用了 "否定條件" 來排除某些不需要重定向的項(xiàng)目:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
在上面的例子中,除已存在的目錄和文件,其他的 HTTP 請求都會(huì)經(jīng)過你的 index.php 文件。也就是說單用戶在地址欄里輸入【example.com/news/article/my_article】的時(shí)候?qū)嶋H上訪問的是【example.com/index.php/news/article/my_article】。
Rewrite使用詳解 確認(rèn)Apache是否加載了Rewrite模塊Apache2.x
LoadModule rewrite_module modules/mod_rewrite.so
啟用.htaccess
AllowOverride None 修改為: AllowOverride All
學(xué)習(xí)Rewrite需要重點(diǎn)了解它的三個(gè)核心:RewriteEngine,RewriteCond,RewriteRule。
RewriteEngine這個(gè)是rewrite功能的總開關(guān),用來開啟是否啟動(dòng)url rewrite
RewriteEngine on
RewriteCondRewriteCond就是一個(gè)過濾條件,簡單來說,當(dāng)URL滿足RewriteCond配置的條件的情況,就會(huì)執(zhí)行RewriteCond下面緊鄰的RewriteRule語句。
RewriteCond的格式如下:
RewriteCond %{NAME_OF_VARIABLE} REGX FLAG
舉個(gè)例子:
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^Mozilla//5/.0.* RewriteRule index.php index.m.php
如果設(shè)置上面的匹配規(guī)則,到來的http請求頭中的HTTP_USER_AGENT匹配【^Mozilla//5/.0.*】正則表達(dá)式的話,則執(zhí)行下面的RewriteRule,也就是說訪問路徑會(huì)跳轉(zhuǎn)到 index.m.php這個(gè)文件。
RewriteCond 和 RewriteRule 是上下對應(yīng)的關(guān)系。可以有1個(gè)或者好幾個(gè)RewriteCond來匹配一個(gè)RewriteRule
那么RewriteCond可以匹配什么樣的數(shù)據(jù)請求呢?
RewriteCond %{HTTP_REFERER} (www.test.cn) RewriteCond %{HTTP_USER_AGENT} ^Mozilla//5/.0.* RewriteCond %{REQUEST_FILENAME} !-f
上面是常見的3種最常見使用最多的HTTP頭連接與請求匹配。
HTTP_REFERER 當(dāng)前請求頁面的來源頁面的地址
當(dāng)前請求頭中 User-Agent: 項(xiàng)的內(nèi)容,如果存在的話。該字符串表明了訪問該頁面的用戶代理的信息。一個(gè)典型的例子是:Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0。
REQUEST_FILENAME 當(dāng)前請求的文件名
RewriteRule 寫法和規(guī)則RewriteRule是配合RewriteCond一起使用,可以說,RewriteRule是RewriteCond成功匹配后的執(zhí)行結(jié)果,所以,它是很重要的。
RewriteRule的格式
RewriteRule Pattern Substitution [flags]
Pattern是一個(gè)正則匹配。Substitution是匹配的替換 [flags]是一些參數(shù)限制;
舉幾個(gè)栗子:
RewriteRule ^room/video/(d+).html web/index.php?c=room&a=video&r=$1 [QSA,NC,L]
意思是以 room開頭的 room/video/123.html 這樣子,變成 web/index.php?c=room&a=video&r=123
RewriteRule .(jpg|gif) http://image.baidu.com/ [R,NC,L]
意思是以為是訪問.jpg或者gif的文件,都會(huì)調(diào)整到 http://image.baidu.com
從上面看出,掌握Rewrite,學(xué)習(xí)正則表達(dá)式是關(guān)鍵所在。
我們再看看[flags]是什么意思?
因?yàn)樗嗔恕N揖吞魩讉€(gè)最常用的來說說。
[QSA] qsappend(追加查詢字符串)的意思,次標(biāo)記強(qiáng)制重寫引擎在已有的替換字符串中追加一個(gè)查詢字符串,而不是簡單的替換。如果需要通過重寫規(guī)則在請求串中增加信息,就可以使用這個(gè)標(biāo)記。上面那個(gè)room的例子,就必須用它。
[NC] nocase(忽略大小寫)的意思,它使Pattern忽略大小寫,也就是在Pattern與當(dāng)前URL匹配時(shí),"A-Z"和"a-z"沒有區(qū)別。這個(gè)一般也會(huì)加上,因?yàn)槲覀兊膗rl本身就不區(qū)分大小寫的。
[R] redirect(強(qiáng)制重定向)的意思,適合匹配Pattern后,Substitution是一個(gè)http地址url的情況,就定向出去了。上面那個(gè)定向到image.baidu.com的例子,就必須也用它。
[L] last(結(jié)尾規(guī)則)的意思,就是已經(jīng)匹配到了,就立即停止,不再匹配下面的Rule了,類似于編程語言中的break語法,跳出去了。
參考apache的虛擬域名rewrite配置以及.htaccess的使用。
Apache的Rewrite詳解
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/29874.html
摘要:使用詳解確認(rèn)是否加載了模塊啟用修改為與學(xué)習(xí)需要重點(diǎn)了解它的三個(gè)核心,,。和是上下對應(yīng)的關(guān)系。該字符串表明了訪問該頁面的用戶代理的信息。當(dāng)前請求的文件名寫法和規(guī)則是配合一起使用,可以說,是成功匹配后的執(zhí)行結(jié)果,所以,它是很重要的。 Rewrite的需求 在用Apache做web服務(wù)器的時(shí)候,有的時(shí)候需要將輸入的URL轉(zhuǎn)換成另一個(gè)URL這種需求。比如用CodeIgniter框架開發(fā)web應(yīng)...
概述 重寫URL是非常有用的一個(gè)功能,因?yàn)樗梢宰屇闾岣咚阉饕骈喿x和索引你的網(wǎng)站的能力;而且在你改變了自己的網(wǎng)站結(jié)構(gòu)后,無需要求用戶修改他們的書簽,無需其他網(wǎng)站修改它們的友情鏈接;它還可以提高你的網(wǎng)站的安全性;而且通常會(huì)讓你的網(wǎng)站更加便于使用和更專業(yè)。 Nginx Rewrite規(guī)則相關(guān)指令 Nginx Rewrite規(guī)則相關(guān)指令有if、rewrite、set、return、break等,其中r...
摘要:一般情況下,經(jīng)過上面的步驟之后,網(wǎng)站基本上可以搭建成功。當(dāng)然,在日常的實(shí)際操作中,可能還會(huì)有一些意想不到的情況發(fā)生,到時(shí)候就考驗(yàn)我們解決問題的能力了。參考文章添加用戶刪除用戶與授權(quán)設(shè)置遠(yuǎn)程訪問的指令詳解的詳解 原文是在我自己博客中,小伙伴也可以點(diǎn)閱讀原文進(jìn)行跳轉(zhuǎn)查看,還有好聽的背景音樂噢~ showImg(https://segmentfault.com/img/remote/1460...
閱讀 2866·2021-11-11 10:58
閱讀 1920·2021-10-11 10:59
閱讀 3489·2019-08-29 16:23
閱讀 2324·2019-08-29 11:11
閱讀 2785·2019-08-28 17:59
閱讀 3838·2019-08-27 10:56
閱讀 2049·2019-08-23 18:37
閱讀 3111·2019-08-23 16:53