apache服務器偽靜態教程
導語:雖然網上有很多教程,不過發現大部分都是抄襲一個人的,一點都不全,所以小編寫了一個簡單的易於理解的教程,歡迎參考!
我學習cess是從目錄保護開始的,這個也比較簡單,網上也有一些編輯器可以選擇,這兒就不説了,教程從綁定域名到子目錄開始,網上也有教程,大部分都是抄襲一個人的,我在這兒解説一下,教程寫法是這樣的:
RewriteEngineOn
RewriteCond%{HTTP_HOST}^(www.)?$
RewriteCond%{REQUEST_URI}!^/blog/
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule^(.*)$/blog/$1
#沒有輸入文件名的默認到到首頁
RewriteCond%{HTTP_HOST}^(www.)?$
RewriteRule^(/)?$blog/[L]
下面我開始解説一下上面的意思:
【RewriteEngineOn】表示重寫引擎開,關閉off,作用就是方便的開啟或關閉以下的語句,這樣就不需要一條一條的註釋語句了。
【RewriteCond%{HTTP_HOST}^(www.)?$】
這是重寫條件,前面%{HTTP_HOST}表示當前訪問的網址,只是指前綴部分,格式是不包括“http://”和“/”,^表示字符串開始,$表示字符串結尾,.表示轉義的.,如果不轉義也行,推薦轉義,防止有些服務器不支持,?表示前面括號www.出現0次或1次,這句規則的意思就是如果訪問的網址是或者就執行以下的語句,不符合就跳過。
【RewriteCond%{REQUEST_URI}!^/blog/】
也是重寫條件,%{REQUEST_URI}表示訪問的相對地址,就是相對根目錄的地址,就是域名/後面的成分,格式上包括最前面的“/”,!表示非,這句語句表示訪問的地址不以/blog/開頭,只是開頭^,沒有結尾$
【RewriteCond%{REQUEST_FILENAME}!-f】
【RewriteCond%{REQUEST_FILENAME}!-d】
這兩句語句的意思是請求的文件或路徑是不存在的,如果文件或路徑存在將返回已經存在的文件或路徑
【RewriteRule^(.*)$/blog/$1】重寫規則,最重要的部分,意思是當上面的RewriteCond條件都滿足的時候,將會執行此重寫規則,^(.*)$是一個正則表達的匹配,匹配的.是當前請求的URL,^(.*)$意思是匹配當前URL任意字符,.表示任意單個字符,*表示匹配0次或N次(N>0),後面/blog/$1是重寫成分,意思是將前面匹配的字符重寫成/blog/$1,這個$1表示反向匹配,引用的是前面第一個圓括號的成分,即^(.*)$中的.*,其實這兒將會出現一個問題,後面討論。
【RewriteCond%{HTTP_HOST}^(www.)?$】
【RewriteRule^(/)?$blog/[L]】
這兩句的意思是指請求的host地址是是,如果地址的結尾只有0個或者1個“/”時,將會重寫到子目錄下的主頁,我猜想這主要因為重寫後的地址是不能自動尋找主頁的,需要自己指定。
現在説説出現的問題,RewriteRule^(.*)$/blog/$1前部分^(.*)$將會匹配當前請求的url,例如:請求網址是,到底是匹配整個,還是隻匹配/即反斜槓後面的成分,還是隻匹配。
答案是:根據RewriteBase規則規定,如果rewritebase為/,將會匹配,不帶前面的反斜槓,所以上條語句應該寫成RewriteRule^(.*)$blog/$1(不帶/),不過實際應用上帶上前面的反斜槓,也可以用,可能帶不帶都行。現在問題出來了,如果不設置rewritebase為/,將會匹配整個網址,顯然這是錯誤的,所以應該添加這條:
RewiteBase/
還有一個問題是,不能保證每個人輸入的網址都是小寫的,如果輸入大寫的呢,linux系統是區分大小寫的,所以應該在RewriteCond後添加[NC]忽略大小寫的。
至此,完整的語句應該是:
####start####
RewriteEngineOn
RewiteBase/
RewriteCond%{HTTP_HOST}^(www.)?$[NC]
RewriteCond%{REQUEST_URI}!^/blog/
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule^(.*)$blog/$1
#沒有輸入文件名的默認到到首頁
RewriteCond%{HTTP_HOST}^(www.)?$[NC]
RewriteRule^(/)?$blog/[L]
-
PHP緩存技術
PHP具有非常強大的功能,所有的CGI的功能PHP都能實現,而且支持幾乎所有流行的數據庫以及操作系統。最重要的是PHP可以用C、C++進行程序的擴展!以下是小編為大家搜索整理的PHP緩存技術,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!全頁面靜態...
-
PHP中超全局變量$GLOBALS和global的區別
人之所以能,是相信能。努力總是會有收穫的。下面是小編整理的PHP中超全局變量$GLOBALS和global的區別,希望對大家有用,更多消息請關注應屆畢業生網。一、超全局變量$GLOBALSPHP超全局變量有很多,如下的都屬於超全局變量(Superglobal):$GLOBALS,$_SERVER,$_GET,$_POST,$_...
-
PHP的漏洞-如何防止PHP漏洞
漏洞無非這麼幾類,XSS、sql注入、命令執行、上傳漏洞、本地包含、遠程包含、權限繞過、信息泄露、cookie偽造、CSRF(跨站請求)等。下面是小編為大家帶來的關於PHP的漏洞的知識,歡迎閲讀。+sql注入其中佔大頭的自然是XSS與SQL注入,對於框架類型或者有公共文件的,建...
-
PHP中用CURL偽造IP來源的方法
PHP中用CURL偽造IP來源的.方法,有需要的朋友可以看看。就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!1.文件複製代碼代碼如下:<?php$ch=curl_init();curl_setopt($ch,CURLOPT_URL,"http://localhost/");curl_setopt($ch,CURL...