.htaccess文件(或者”分布式配置文件”)提供了針對目錄改變配置的方法,, 即,在一個特定的文檔目錄中放置一個包含一個或多個指令的文件,, 以作用于此目錄及其所有子目錄,。作為用戶,所能使用的命令受到限制,。管理員可以通過Apache的AllowOverride指令來設(shè)置,。 概述來說,htaccess文件是Apache服務(wù)器中的一個配置文件,,它負責相關(guān)目錄下的網(wǎng)頁配置,。通過htaccess文件,可以幫我們實現(xiàn):網(wǎng)頁301重定向,、自定義404錯誤頁面,、改變文件擴展名、允許/阻止特定的用戶或者目錄的訪問,、禁止目錄列表,、配置默認文檔等功能。 .htaccess 詳解
來源網(wǎng)址:http://www.cnblogs.com/adforce/archive/2012/11/23/2784664.html .htaccess是什么 啟用.htaccess,需要修改httpd.conf,,啟用AllowOverride,,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,,可以用AccessFileName指令來改變,。例如,需要使用.config ,,則可以在服務(wù)器配置文件中按以下方法配置:AccessFileName .config ,。 籠統(tǒng)地說,,.htaccess可以幫我們實現(xiàn)包括:文件夾密碼保護,、用戶自動重定向,、自定義錯誤頁面、改變你的文件擴展名,、封禁特定IP地址的用戶,、只允許特定IP地址的用戶,、禁止目錄列表,以及使用其他文件作為index文件等一些功能,。 工作原理 .htaccess文件(或者”分布式配置文件”)提供了針對每個目錄改變配置的方法,即在一個特定的目錄中放置一個包含指令的文件,,其中的指令作用于此目錄及其所有子目錄,。 (不)使用.htaccess文件的場合 一般情況下,,不應(yīng)該使用.htaccess文件,除非你對主配置文件沒有訪問權(quán)限,。有一種很常見的誤解,,認為用戶認證只能通過.htaccess文件實現(xiàn),其實并不是這樣,,把用戶認證寫在主配置文件中是完全可行的,,而且是一種很好的方法。 其次是安全。這樣會允許用戶自己修改服務(wù)器的配置,,這可能會導(dǎo)致某些意想不到的修改,,所以請認真考慮是否應(yīng)當給予用戶這樣的特權(quán)。但是,,如果給予用戶較少的特權(quán)而不能滿足其需要,,則會帶來額外的技術(shù)支持請求,所以,,必須明確地告訴用戶已經(jīng)給予他們的權(quán)限,,說明AllowOverride設(shè)置的值,并引導(dǎo)他們參閱相應(yīng)的說明,,以免日后生出許多麻煩,。 /www/htdocs/example目錄下的.htaccess文件的內(nèi)容: 指令的作用范圍 .htaccess文件中的配置指令作用于.htaccess文件所在的目錄及其所有子目錄,,但是很重要的、需要注意的是,,其上級目錄也可能會有.htaccess文件,,而指令是按查找順序依次生效的,所以一個特定目錄下的.htaccess文件中的指令可能會覆蓋其上級目錄中的.htaccess文件中的指令,,即子目錄中的指令會覆蓋父目錄或者主配置文件中的指令,。 疑難解答 如果在.htaccess文件中的某些指令不起作用,,可能有多種原因,。 .htaccess工具 不會寫的朋友,在這介紹一款很不錯.htaccess的重定向—URL重寫工具rewriting-tool ——————————————————————————– htaccess語法教程 RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$ RewriteCond %{REQUEST_URI} !^/blog/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /blog/$1 # 沒有輸入文件名的默認到到首頁 RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$ RewriteRule ^(/)?$ blog/index.php [L] 下面我開始解說一下上面的意思: 【RewriteEngine On】 表示重寫引擎開,,關(guān)閉off,,作用就是方便的開啟或關(guān)閉以下的語句,這樣就不需要一條一條的注釋語句了,。 【RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$】 這是重寫條件,,前面%{HTTP_HOST}表示當前訪問的網(wǎng)址,只是指前綴部分,,格式是www.不包括“http://”和“/”,,^表示 字符串開始,$表示字符串結(jié)尾,,\.表示轉(zhuǎn)義的. ,,如果不轉(zhuǎn)義也行,推薦轉(zhuǎn)義,,防止有些服務(wù)器不支持,,?表示前面括號www\.出現(xiàn)0次或1次,這句規(guī)則的意思就是如果訪問的網(wǎng)址是或者 www.就執(zhí)行以下的語句,,不符合就跳過,。 【RewriteCond %{REQUEST_URI} !^/blog/】 也是重寫條件,%{REQUEST_URI}表示訪問的相對地址,,就是相對根目錄的地址,,就是域名/后面的成分,格式上包括最前面的“/”,,!表示非,,這句語句表示訪問的地址不以/blog/開頭,只是開頭^,,沒有結(jié)尾$ 【RewriteCond %{REQUEST_FILENAME} !-f】 【RewriteCond %{REQUEST_FILENAME} !-d】 這兩句語句的意思是請求的文件或路徑是不存在的,,如果文件或路徑存在將返回已經(jīng)存在的文件或路徑 【RewriteRule ^(.*)$ /blog/$1】 重寫規(guī)則,最重要的部分,,意思是當上面的RewriteCond條件都滿足的時候,,將會執(zhí)行此重寫規(guī)則,^(.*)$是一個正則表達的 匹配,,匹配的是當前請求的URL,,^(.*)$意思是匹配當前URL任意字符,.表示任意單個字符,,*表示匹配0次或N次(N>0),,后面 /blog/$1是重寫成分,意思是將前面匹配的字符重寫成/blog/$1,,這個$1表示反向匹配,,引用的是前面第一個圓括號的成分,,即^(.*)$中 的.* ,其實這兒將會出現(xiàn)一個問題,,后面討論,。 【RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$】 【RewriteRule ^(/)?$ blog/index.php [L]】 這兩句的意思是指請求的host地址是www.是,如果地址的結(jié)尾只有0個或者1個“/”時,,將會重寫到子目錄下的主頁,,我猜想這主要因為重寫后的地址是不能自動尋找主頁的,需要自己指定,。 現(xiàn)在說說出現(xiàn)的問題,,RewriteRule ^(.*)$ /blog/$1 前部分 ^(.*)$ 將會匹配當前請求的url。 例如:請求網(wǎng)址是http://www./a.html,,到底是匹配整個http://www./a.html,,還是只匹配/a.html即反斜杠后面的成分,還是只匹配a.html,。 答案是:根據(jù)RewriteBase規(guī)則規(guī)定,,如果rewritebase 為/,將會匹配a.html,,不帶前面的反斜杠,,所以上條語句應(yīng)該寫成RewriteRule ^(.*)$ blog/$1(不帶/),不過實際應(yīng)用上帶上前面的反斜杠,,也可以用,,可能帶不帶都行。現(xiàn)在問題出來了,,如果不設(shè)置rewritebase 為/ ,,將會匹配整個網(wǎng)址http://www./a.html,顯然這是錯誤的,,所以應(yīng)該添加這條:RewiteBase / 還有一個問題是,,不能保證每個人輸入的網(wǎng)址都是小寫的,如果輸入大寫的呢,,linux系統(tǒng)是區(qū)分大小寫的,,所以應(yīng)該在RewriteCond后添加[NC]忽略大小寫的。 至此,,完整的語句應(yīng)該是: RewriteEngine On RewiteBase / RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$ [NC] RewriteCond %{REQUEST_URI} !^/blog/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ blog/$1 # 沒有輸入文件名的默認到到首頁 RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$ [NC] RewriteRule ^(/)?$ blog/index.php [L] 如果后面還繼續(xù)有語句的,,就不應(yīng)該加上最后的[L],,因為這是表示最后一條語句的意思,。 防盜鏈的語句,同樣需要添加RewiteBase /,,如下: RewriteEngine on RewiteBase / RewriteCond %{HTTP_REFERER} !^$ [NC] RewriteCond %{HTTP_REFERER} !xxx.info [NC] RewriteRule \.(jpg|gif|png|bmp|swf|jpeg)$ /error/daolian.gif [R,NC,L] 如果后面還繼續(xù)有語句的,,就不應(yīng)該加上最后的[L],,/error/daolian.gif為別人盜鏈時顯示的圖片。 下面附上簡單的語法規(guī)則和flags 【RewriteCond語法】 RewriteCond TestString CondPattern [flags] rewritecond的其他用法: “-d”(目錄) 將TestString視為一個路徑名并測試它是否為一個存在的目錄,。 “-f”(常規(guī)文件) 將TestString視為一個路徑名并測試它是否為一個存在的常規(guī)文件,。 “-s”(非空的常規(guī)文件) 將TestString視為一個路徑名并測試它是否為一個存在的、尺寸大于0的常規(guī)文件,。 “-l”(符號連接) 將TestString視為一個路徑名并測試它是否為一個存在的符號連接,。 “-x”(可執(zhí)行) 將TestString視為一個路徑名并測試它是否為一個存在的、具有可執(zhí)行權(quán)限的文件,。該權(quán)限由操作系統(tǒng)檢測,。 “-F”(對子請求存在的文件) 檢查TestString是否為一個有效的文件,而且可以在服務(wù)器當前的訪問控制配置下被訪問,。它使用一個內(nèi)部子請求來做檢查,,由于會降低服務(wù)器的性能,所以請謹慎使用,! “-U”(對子請求存在的URL) 檢查TestString是否為一個有效的URL,,而且可以在服務(wù)器當前的訪問控制配置下被訪問。它使用一個內(nèi)部子請求來做檢查,,由于會降低服務(wù)器的性能,,所以請謹慎使用! 【RewriteRule語法:】 RewriteRule Pattern Substitution [flags] 【flags】 “chain|C”(鏈接下一規(guī)則) 此標記使當前規(guī)則與下一個規(guī)則相鏈接,。它產(chǎn)生這樣的效果:如果一個規(guī)則被匹配,,則繼續(xù)處理其后繼規(guī)則,也就是這個標記不起作用,;如果該規(guī)則不被匹配,,則其后繼規(guī)則將被跳過。比如,,在一個目錄級規(guī)則中執(zhí)行一個外部重定向時,,你可能需要刪除”.www”(此處不應(yīng)該出現(xiàn)”.www”)。 “cookie|CO=NAME:VAL:domain[:lifetime[:path]]”(設(shè)置cookie) 在客戶端設(shè)置一個cookie,。cookie的名稱是NAME,,值是VAL。domain是該cookie的域,,比如”.apache.org”,,可選的lifetime是cookie的有效期(分鐘),可選的path是cookie的路徑,。 “env|E=VAR:VAL”(設(shè)置環(huán)境變量) 此標記將環(huán)境變量VAR的值為VAL,,VAL可以包含可擴展的正則表達式反向引用($N和%N)。此標記可以多次使用以設(shè)置多個變量,。這些變量可以在其后許多情況下被間接引用,,通常是在XSSI(<!–#echo var=”VAR”–>)或CGI($ENV{“VAR”})中,,也可以在后繼的RewriteCond指令的CondPattern參數(shù)中通過%{ENV:VAR}引用。使用它可以記住從URL中剝離的信息,。 “forbidden|F”(強制禁止URL) 強制禁止當前URL,,也就是立即反饋一個HTTP響應(yīng)碼403(被禁止的)。使用這個標記,,可以鏈接若干個RewriteConds來有條件地阻塞某些URL,。 “gone|G”(強制廢棄URL) 強制當前URL為已廢棄,也就是立即反饋一個HTTP響應(yīng)碼410(已廢棄的),。使用這個標記,,可以標明頁面已經(jīng)被廢棄而不存在了。 “handler|H=Content-handler”(強制指定內(nèi)容處理器) 強自制定目標文件的內(nèi)容處理器為Content-handler,。例如,,用來模擬mod_alias模塊的ScriptAlias指令,以強制映射文件夾內(nèi)的所有文件都由”cgi-script”處理器處理,。 “l(fā)ast|L”(結(jié)尾規(guī)則) 立即停止重寫操作,,并不再應(yīng)用其他重寫規(guī)則。它對應(yīng)于Perl中的last命令或C語言中的break命令,。這個標記用于阻止當前已被重寫的URL被后繼規(guī)則再次重寫,。例如,使用它可以重寫根路徑的URL(“/”)為實際存在的URL(比如:”/e/www/”),。 “next|N”(從頭再來) 重新執(zhí)行重寫操作(從第一個規(guī)則重新開始),。此時再次進行處理的URL已經(jīng)不是原始的URL了,而是經(jīng)最后一個重寫規(guī)則處理過的URL,。它對應(yīng)于Perl中的next命令或C語言中的continue命令,。此標記可以重新開始重寫操作(立即回到循環(huán)的開頭)。但是要小心,,不要制造死循環(huán),! “nocase|NC”(忽略大小寫) 它使Pattern忽略大小寫,也就是在Pattern與當前URL匹配時,,”A-Z”和”a-z”沒有區(qū)別,。 “noescape|NE”(在輸出中不對URI進行轉(zhuǎn)義) 此標記阻止mod_rewrite對重寫結(jié)果應(yīng)用常規(guī)的URI轉(zhuǎn)義規(guī)則。 一般情況下,,特殊字符(“%”, “$”, “;”等)會被轉(zhuǎn)義為等值的十六進制編碼(“%25′, “%24′, “%3B”等),。此標記可以阻止這樣的轉(zhuǎn)義,以允許百分號等符號出現(xiàn)在輸出中,,比如: RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE] 可以使”/foo/zed轉(zhuǎn)向到一個安全的請求”/bar?arg=P1=zed”,。 “nosubreq|NS”(不對內(nèi)部子請求進行處理) 在當前請求是一個內(nèi)部子請求時,此標記強制重寫引擎跳過該重寫規(guī)則。比如,,在mod_include試圖搜索目錄默認文件(index.xxx)時,Apache會在內(nèi)部產(chǎn)生子請求,。對于子請求,,重寫規(guī)則不一定有用,而且如果整個規(guī)則集都起作用,,它甚至可能會引發(fā)錯誤,。所以,可以用這個標記來排除某些規(guī)則,。 使用原則:如果你為URL添加了CGI腳本前綴,,以強制它們由CGI腳本處理,但對子請求處理的出錯率(或者資源開銷)很高,,在這種情況下,,可以使用這個標記。 “proxy|P”(強制為代理) 此標記使替換成分被內(nèi)部地強制作為代理請求發(fā)送,,并立即中斷重寫處理,,然后把處理移交給mod_proxy模塊。你必須確保此替換串是一個能夠被mod_proxy處理的有效URI(比如以http://hostname開頭),,否則將得到一個代理模塊返回的錯誤,。使用這個標記,可以把某些遠程成分映射到本地服務(wù)器域名空間,,從而增強了ProxyPass指令的功能,。 注意:要使用這個功能,必須已經(jīng)啟用了mod_proxy模塊,。 “passthrough|PT”(移交給下一個處理器) 此標記強制重寫引擎將內(nèi)部request_rec結(jié)構(gòu)中的uri字段設(shè)置為filename字段的值,,這個小小的修改使得RewriteRule指令的輸出能夠被(從URI轉(zhuǎn)換到文件名的)Alias, ScriptAlias, Redirect等指令進行后續(xù)處理[原文:This flag is just a hack to enable post-processing of the output of RewriteRule directives, using Alias, ScriptAlias, Redirect, and other directives from various URI-to-filename translators.]。舉一個能說明其含義的例子: 如果要將/abc重寫為/def,, 然后再使用mod_alias將/def轉(zhuǎn)換為/ghi,,可以這樣: RewriteRule ^/abc(.*) /def$1 [PT] Alias /def /ghi 如果省略了PT標記,雖然將uri=/abc/…重寫為filename=/def/…的部分運作正常,,但是后續(xù)的mod_alias在試圖將URI轉(zhuǎn)換到文件名時會遭遇失效,。 注意:如果需要混合使用多個將URI轉(zhuǎn)換到文件名的模塊時,就必須使用這個標記,。,。此處混合使用mod_alias和mod_rewrite就是個典型的例子。 “qsappend|QSA”(追加查詢字符串) 此標記強制重寫引擎在已有的替換字符串中追加一個查詢字符串,,而不是簡單的替換,。如果需要通過重寫規(guī)則在請求串中增加信息,就可以使用這個標記。 “redirect|R [=code]“(強制重定向) 若Substitution以http://thishost[:thisport]/(使新的URL成為一個URI)開頭,,可以強制性執(zhí)行一個外部重定向,。如果沒有指定code,則產(chǎn)生一個HTTP響應(yīng)碼302(臨時性移動),。如果需要使用在300-400范圍內(nèi)的其他響應(yīng)代碼,,只需在此指定即可(或使用下列符號名稱之一:temp(默認), permanent, seeother)。使用它可以把規(guī)范化的URL反饋給客戶端,,如將”/~”重寫為”/u/”,,或始終對/u/user加上斜杠,等等,。 注意:在使用這個標記時,,必須確保該替換字段是一個有效的URL。否則,,它會指向一個無效的位置,!并且要記住,此標記本身只是對URL加上http://thishost[:thisport]/前綴,,重寫操作仍然會繼續(xù)進行,。通常,你還會希望停止重寫操作而立即重定向,,那么就還需要使用”L’標記,。 “skip|S=num”(跳過后繼規(guī)則) 此標記強制重寫引擎跳過當前匹配規(guī)則之后的num個規(guī)則。它可以模擬if-then-else結(jié)構(gòu):最后一個規(guī)則是then從句,,而被跳過的skip=N個規(guī)則是else從句,。注意:它和”chain|C”標記是不同的! “type|T=MIME-type”(強制MIME類型) 強制目標文件的MIME類型為MIME-type,,可以用來基于某些特定條件強制設(shè)置內(nèi)容類型,。比如,下面的指令可以讓.php文件在以.phps擴展名調(diào)用的情況下由mod_php按照PHP源代碼的MIME類型(application/x-httpd-php-source)顯示: RewriteRule ^(.+\.php)s$ $1 [T=application/x-httpd-php-source] .htaccess實例 http:///forum.php?mod=viewthread&tid=7455&page=1&extra=#pid41053 http://www.chinaz.com/web/2010/0415/111514.shtml 參考:http://baike.baidu.com/view/91163.htm http://hi.baidu.com/wojiubaibudu/item/4b3513c74a8fe47aced4f817 .htaccess rewrite 規(guī)則詳細說明
來源網(wǎng)址: http://www./htaccess-rewrite.html 作者: freemouse 日期 2010年07月22日 | 可以轉(zhuǎn)載, 但必須以超鏈接形式標明文章原始出處和作者信息及版權(quán)聲明 網(wǎng)址: http://www./htaccess-rewrite.html 用Apache虛擬主機的朋友很多,,apache提供的.htaccess模塊可以為每個虛擬主機設(shè)定rewrite規(guī)則,,這對網(wǎng)站SEO優(yōu)化相當有用,同時也改善了用戶體驗,。國內(nèi)的虛擬機一般不提供.htaccess功能(據(jù)我所知,,discuz的主機好像提供此功能),而在國外主機中,,.htaccess功能似乎是標配,,筆者的Blog架在MT上,支持.htaccess,,每次看到一堆別人寫好了的.htaccess設(shè)置,,很多命令都不甚了了,查看、修改起來很不方便,,痛定思痛,,潛心學(xué)習一下,知其所以然嘛~ 學(xué)習前提:(不會的朋友要學(xué)習一下,,才能更好的理解下面的文字呢)
rewrite的語法格式:
RewriteEngine On|OffRewriteEngine 用于開啟或停用rewrite功能,。 rewrite configurations 不會自動繼承,因此你得給每個你想用 rewrite功能的虛擬主機目錄中加上這個指令,。 RewriteBase URL-pathRewriteBase用于設(shè)定重寫的基準URL,。在下文中,你可以看見RewriteRule可以用于目錄級的配置文件中 (.htaccess)并在局部范圍內(nèi)起作用,,即規(guī)則實際處理的只是剝離了本地路徑前綴的一部分,。處理結(jié)束后,這個路徑會被自動地附著回去,。默認值 是”RewriteBase physical-directory-path”,。 在對一個新的URL進行替換時,此模塊必須把這個URL重新注入到服務(wù)器處理中,。為此,,它必須知道其對應(yīng)的URL前綴或者說URL基準。通常,,此前綴就是 對應(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ī)則僅在當前URI與pattern匹配并且符合這些條件的時候才會起作用。 TestString是一個純文本的字符串,,但是還可以包含下列可擴展的成分:
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
CondPattern是條件pattern, 即, 一個應(yīng)用于當前實例TestString的正則表達式, 即, TestString將會被計算然后與CondPattern匹配. 注意:CondPattern是一個兼容perl的正則表達式,, 但是還有若干補充:
RewriteOptions Options
指令為當前服務(wù)器級和目錄級的配置設(shè)置一些選項。 Option可以是下列值之一:
RewriteRule Pattern Substitution [flags]
指令是重寫引擎的根本,。此指令可以多次使用。 每個指令定義一個簡單的重寫規(guī)則,。這些規(guī)則的定義順序尤為重要, 因為,,在運行時刻,規(guī)則是按這個順序逐一生效的. Pattern是一個作用于當前URL的兼容perl的正則表達式,。 此外,,還可以使用否字符(‘
‘)的pattern前綴,以實現(xiàn)pattern的反轉(zhuǎn),。但是,,需要注意的是使用否字符以反轉(zhuǎn)pattern時,pattern中不能使用分組的通配成分,;即$N,。 重寫規(guī)則中的Substitution是, 當原始URL與Pattern相匹配時,,用以替代(或替換)的字符串,。除了純文本,,還可以使用
下面給出幾個完整的例子供各位參考:
========================================================================================= 附錄:flags
深入閱讀:http:///man/newsoft/ApacheManual/mod/mod_rewrite.html 全面理解.htaccess語法中RewriteCond和RewriteRule意義
來源網(wǎng)址: http://blog.sina.com.cn/s/blog_7048e38101017xdx.html (2012-08-13 10:38:44) 關(guān)于.htaccess偽靜態(tài)的使用,章郎蟲一直沒有好好想過,。以前一直是在網(wǎng)上找現(xiàn)成的,,然后修改下網(wǎng)址實現(xiàn)重定向。今天我專門找資料看了下RewriteCond和RewriteRule的意思及使用方法,。然后回過頭看《網(wǎng)站地址更改之htaccess和php的301重定向》這篇文章,,終于有些理解。現(xiàn)在不用一直找現(xiàn)成的代碼,,也可以自己寫一些規(guī)則實現(xiàn)重定向了,。下面就簡單的介紹下他們的用法。 RewriteCond的語法 RewriteCond TestString CondPattern [Flags] 其中的TestString是指一個文本格式的條件,,例子中用的是環(huán)境變量名HTTP_HOST所包含的內(nèi)容(Name= Value),,這是一個map(鍵值對)格式的數(shù)據(jù)類型。 CondPattern是條件參數(shù),,這兒以第一個例子為例,,就是abc.com。 Flags標識是是第三個參數(shù),,可以用來緊跟下一個條件,,這兒用OR表示或者,如果沒有[Flags],,則用隱含的AND,,表示并且。其它的還可以NC等等,,表示忽略大小寫 RewriteCond就像我們程序中的if語句一樣,表示如果符合某個或某幾個條件則執(zhí)行RewriteCond下面緊鄰的RewriteRule語句,,這就是RewriteCond最原始,、基礎(chǔ)的功能,為了方便理解,,下面來看看幾個例子,。 RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5.0.* RewriteRule index.php index.m.php RewriteCond %{HTTP_USER_AGENT} ^Lynx.* RewriteRule index.php index.L.php RewriteRule index.php index.b.php 上面語句的作用是當你是用FF瀏覽器訪問index.php這個文件的時候,會自動讓你訪問到index.m.php這個文件,,當你是用一些移動終端訪問 的 時候,,會讓你對index.php這個文件的訪問實際訪問的是index.L.php去,,如果你是用其它的瀏覽器訪問的時候,會讓你跳到 index.b.php,。 RewriteRule的語法 RewriteRule Pattern Substitution [Flags] 其中的Pattern就是參數(shù),,一般為一些文件的擴展名,Substitution是用來替換前面用的,,這兒的Flags,常用的R表示 redirect(強制重定向),F(xiàn)表示forbidden(禁止訪問),,L表示last(最后),,通常當你希望停止重寫操作而立即重定向時,可用它,。 .htaccess中用到的正則 元字符^(和數(shù)字6在同一個鍵位上的符號)和$都匹配一個位置,,這和\b有點類似。 ^匹配你要用來查找的字符串的開頭 $匹配結(jié)尾,。 比如一個網(wǎng)站如果要求你填寫的QQ號必須為5位到12位數(shù)字時,,可以使用:^\d{5,12}$。 如果你對正則表達式不是很明白,,可以看下正則表達式的教程,。 Source from: http://www./897.html
URL重寫 htaccess文件寫法的10個技巧
來源網(wǎng)址: http://blog.sina.com.cn/s/blog_7069146d01015ikf.html (2012-07-26 03:25:44) “.htaccess”文件往往被網(wǎng)頁設(shè)計師們忽略。假如你還不知道什么是htaccess的話,,你可以去查一下wikipedia,。它是目錄級別的配置文件,有常用的網(wǎng)頁服務(wù)器支持這種配置,,例如Apache,。下面我將列出10條有用的.htaccess配置技巧。 1. 反盜鏈 那些盜用了你的內(nèi)容,,還不愿意自己存儲圖片的網(wǎng)站是無恥的,。你可以通過以下配置來放置別人盜用你的圖片: RewriteBase / RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www.)?/.*$ [NC] RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L] 2. 防止目錄瀏覽 有時候目錄瀏覽是有用的,但大部分情況會有安全問題,。為了讓你的網(wǎng)站更安全,,你可以通過htaccess文件來禁用這個功能: Options All -Indexes 3. SEO友好的301永久重定向 這一招是我常用的。每次我更改網(wǎng)站URL結(jié)構(gòu)的時候,,我都會做301重定向: Redirect 301 http://www./article.html http://www./archives/article 4. 顯示個性化的 404 錯誤頁面 當用戶訪問了一個不存在的頁面的時候,,網(wǎng)頁服務(wù)器會顯示“404 file not found”錯誤。有很多CMS可以讓你設(shè)置自定義的錯誤頁面,,但最簡單的方法是更改htaccess: ErrorDocument 404 /404.html 5. 設(shè)置目錄的默認頁面 假如你需要為不同的目錄設(shè)置不同的默認頁面,,你可以很容易的通過 .htaccess 實現(xiàn): DirectoryIndex about.html 6. 基于referer來限制網(wǎng)站訪問 站長通常不會限制網(wǎng)站訪問,但是當你發(fā)現(xiàn)有一些網(wǎng)站盡給你帶來垃圾流量的話,你就應(yīng)該屏蔽他們: <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_REFERER} spamteam.com [NC,OR] RewriteCond %{HTTP_REFERER} trollteam.com [NC,OR] RewriteRule .* – [F] </ifModule> 7. 限制PHP上傳文件大小 這招在共享空間的服務(wù)器上很有用,,可以讓我的用戶上傳更大的文件,。第一個是設(shè)置最大的上傳文件大小,第二個是設(shè)置最大的POST請求大小,,第三個PHP腳本最長的執(zhí)行時間,,最后一個是腳本解析上傳文件的最長時間: php_value upload_max_filesize 20M php_value post_max_size 20M php_value max_execution_time 200 php_value max_input_time 200 8. 壓縮文件 你可以通過壓縮文件來減少網(wǎng)絡(luò)流量,也頁面裝載時間: AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript 9. 緩存文件 這一點還需要解釋嗎,? <FilesMatch “.(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$”> Header set Cache-Control “max-age=2592000〃 </FilesMatch> 10. 添加尾部的反斜杠 我并不確定,,但是很多文章,很多人都說添加尾部反斜杠有益于SEO: <IfModule mod_rewrite.c> RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L] </IfModule> ==================== 引用:http://www./658/html/xxlm/itxxl/882.html .htaccess基本語法和應(yīng)用.htaccess是Apache服務(wù)器的一個非常強大的分布式配置文件,。 正確的理解和使用.htaccess文件,,可以幫助我們優(yōu)化自己的服務(wù)器或者虛擬主機。 如何啟用htaccess以windows為例,,進入apache/conf目錄,,找到httpd.conf文件,去掉 LoadModule rewrite_module modules/mod_rewrite.so 前面的#,,然后設(shè)置目錄屬性AllowOverride All,,重啟apache即可 下面是一個典型的htaccess文件 # 開啟URL重寫 RewriteEngine on # URL重寫的作用域 # RewriteBase /path/to/url # 滿足怎樣的條件 RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] # 應(yīng)用怎樣的規(guī)則 RewriteRule .? http://www.%{REQUEST_URI} [R=301,L] 來看看RewriteCond,首先有一個%,,因為{HTTP_HOST}是一個apache變量,,需要用%來指示。從!開始就是匹配的條件,,支持 正則,。!表示不等于,這句話的意思就是:如果HTTP_HOST不是www.,。后面的[NC](no case)表示忽略大小寫,,常見的還有
圖片防盜鏈 RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/ [NC] RewriteRule \.(gif|jpg|png)$ - [F] 由于是基于HTTP_REFERER的驗證,所以只能防止一般的圖片盜鏈,,因為HTTP_REFERER是比較容易偽造的 自定義404錯誤頁面 如果用戶輸入了一個不存在的url,,那么就顯示自定義的錯誤頁面 ErrorDocument 404 /404.html # 其他同理 ErrorDocument 500 /500.html 處理移動過的文件 Redirect 301 /old.html http:///new.html # 也可以是下面這樣 RewriteRule /old.html http:///new.html [R=301,L] # 如果想隱式跳轉(zhuǎn)(URL地址不變,但實際上內(nèi)容是其他URL的),,就使用下面的 RewriteRule /old.html http:///new.html [L] 對于RewriteRule還有好多文章可以做,,比如 # 把html后綴的url鏈接到php文件 # $1指代的是前面第1個用括號括起來的內(nèi)容 RewriteRule ^/?([a-z/]+)\.html$ $1.php [L] # 或者把舊文件夾的內(nèi)容鏈接到新文件夾 RewriteRule ^/?old_directory/([a-z/.]+)$ new_directory/$1 [R=301,L] # 隱藏文件名 RewriteRule ^/?([a-z]+)$ $1.php [L] 禁止顯示目錄列表如果目錄里沒有index文件,又沒有對該目錄做過特別的處理,,尤其是windows主機,那么該目錄里的內(nèi)容就會顯示出來,這時可以在根目錄創(chuàng)建 一個.htaccess文件,,然后寫上 Options -Indexes # 就這么一句就搞定了 阻止/允許特定IP/IP段 # 禁止所有IP,,除了指定的 order deny,allow deny from all # 如果想允許IP段,,如123.123.123.0 ~ 123.123.123.255,,則 # allow from 123.123.123. allow from 123.123.123.123 ErrorDocument 403 /page.html <Files page.html> allow from all </Files> #如果想禁止特定IP deny from 123.123.123.123 添加MIME類型 AddType video/x-flv .flv # 如果設(shè)置類型為 application/octet-stream 將提示下載 AddType application/octet-stream .pdf 用.htaccess文件實現(xiàn)網(wǎng)站404錯誤
來源網(wǎng)址: http://www./archives/618 作者:admin 發(fā)表于:2012年06月11日 09:25 分類:SEO技術(shù) 字體: 小 中 大 定義404錯誤 頁對網(wǎng)站SEO的作用還是很大的,404 錯誤意味著鏈接指向的網(wǎng)頁不存在,,即原始網(wǎng)頁的URL失效,,這種情況經(jīng)常會發(fā)生,很難避免,,當Web 服務(wù)器接到類似請求時,,會返回一個404 狀態(tài)碼,告訴瀏覽器要請求的資源并不存在,。但是,Web服務(wù)器默認的404錯誤頁面,,十分呆板,,而且對SEO是不利,,對于網(wǎng)站流量也是很大的損失,。 現(xiàn)在大多數(shù)主機都提供設(shè)置404頁面的接口,這樣的無論是國內(nèi)主機還是國外主機都很好設(shè)置,,不過仍然有不少主機不提供設(shè)置頁面,,這樣的多是國內(nèi)主機和一些免費主機,本文主要是針對這些主機,,而且是針對PHP主機,。 1. Apache下設(shè)置404錯誤頁面(一般是Linux主機) (1) 在.htaccess 文件(如果沒有則新建一個)中加入如下內(nèi)容:ErrorDocument 404 /404.html,將.htaccess文件上傳到網(wǎng)站根目錄 注:也可以使用這樣的命令 ErrorDocument 404 http://www./404.htm ErrorDocument 500 http://www./500.htm (2) 制作一個404頁面,,隨便您設(shè)計,,命名為404.html,,同樣上傳到網(wǎng)站根目錄,。如果您還想設(shè)置500頁面,還可以在.htaccess命令里加上ErrorDocument 404 /500.html 并制作一個500頁面?zhèn)鞯骄W(wǎng)站根目錄 網(wǎng)友不必檢驗本站的404頁面了,,因為本站用的是godaddy免費的空間,,404頁面會有廣告。 本文由新未來博客(www.)整理,轉(zhuǎn)載請注明! 本文固定鏈接: http://www./archives/618 | WordPress主機|香港主機空間|香港高速主機|新未來博客 由淺入深剖析.htaccess
來源網(wǎng)址: http://blog.csdn.net/cdefg198/article/details/6645759 2011-07-29 23:36 210人閱讀 評論(0) 收藏 舉報 1,、.htaccess文件使用前提.htaccess的主要作用就是實現(xiàn)url改寫,也就是當瀏覽器通過url訪問到服務(wù)器某個文件夾時,,作為主人,,我們可以來接待這個url,具體地怎樣接待它,,就是此文件的作用,。所有的訪問都是通過URL實現(xiàn),所以.htaccess的作用非同小可,。正因為此,,所以一般地網(wǎng)站通過設(shè)置.htaccess,通過一個十分友好的url吸引用戶進來,,然后用.htaccess把用戶帶到需要訪問的位置,。 要想使用這個強大功能,就得開啟apache里面的重寫模塊,。 前面的文章中曾經(jīng)講到過windows和ubuntu開啟 rewrite模塊使用.htaccess ,。 其實開啟模塊大體的步驟都是一樣的,無論是Windows和linux,。 2、.htaccess基本語法介紹開啟重寫引擎 :RewriteEngine on 設(shè)置重寫的根目錄:RewriteBase / — 說明 :因為定義了這個文件夾,,所以對應(yīng)的替換就有了一個參照,。 匹配所有符合條件的請求:RewriteCond — 說明:RewriteCond 定義了一系列規(guī)則條件,這個指令可以有一條或者多條,,只有用戶拿來的url符合這些條件之后,,我們的.htaccess才開始接待,否則用戶就直接自己去訪問所需要的目錄了,。 舉個例子,,為了能讓搜索引擎更多地抓取我們的網(wǎng)頁而避免重復(fù)抓,我們通常把沒有www的域名重定向到www.XXX.com,,如下就實現(xiàn)了這個功能: RewriteEngine On RewriteCond %{HTTP_HOST} ^nbphp\.com$ [NC] RewriteRule ^(.*)$ http://www./$1 [R=301,L] 上例便把 重定向到www. %{HTTP_HOST} 是指取得用戶訪問的URL的主域名 然后空格后面是一個正則表達式匹配,,意識就是說是否是 。 如果用戶訪問使用的URL滿足所有列出的RewriteCond 提出的條件,,那么進行下一步RewriteRule 即開始進行引導(dǎo),,這才開始實現(xiàn).htaccess文件的重要功能。 同樣,,前面是正則表達式,,用戶分析用戶的除了主域名之外的URL ,^(.*)$的意思就是所有的內(nèi)容,。 然后空格后面寫的是我們引導(dǎo)用戶訪問的目錄,我們帶著他走到新的一個域名上,。$1 指的是前面括號里匹配url所得到的內(nèi)容,。 這樣就是一個完整的小例子,。關(guān)于RewriteCond里 如何調(diào)用url的某個部分,,我們可以參考這篇文章(Apache的Mod_rewrite學(xué)習 (RewriteCond重寫規(guī)則的條件); 3,、現(xiàn)學(xué)現(xiàn)用,,學(xué)習正則表達式。推薦一個經(jīng)典的教程: 正則表達式30分鐘入門教程 這個教程的確很簡單,,看完基本上寫一些簡單的正則就沒有問題了,。正則是一個需要長期使用的工具,隔段時間不用會忘記,,所以我每次都看一遍這個教程,。其實學(xué)過之后重要的就是一點內(nèi)容。我簡單羅列了如下: . 換行符以外的所有字符 \w匹配字母或數(shù)字或下劃線或漢字 \s匹配任意的空白符 \d匹配數(shù)字 \b匹配單詞的開始或結(jié)束 ^匹配字符串的開始 $匹配字符串的結(jié)束 *重復(fù)零次或更多次 *重復(fù)零次或更多次 +重復(fù)一次或更多次 重復(fù)零次或一次 {n}重復(fù)n次 {n,}重復(fù)n次或更多次 {n,m}重復(fù)n到m次 應(yīng)用替換時,,前面第一個()中匹配的內(nèi)容后面就用$1引用,,第二個()中匹配的就用$2應(yīng)用…… 推薦一個實用的正則在線測試網(wǎng)站 http://www./ 我們來分析一下 discuz7.0 搜索引擎優(yōu)化 htaccess 里面的重寫。 RewriteRule ^forum-([0-9]+)-([0-9]+)\.html$ forumdisplay.php?fid=$1&page=$2 首先加入用戶通過 /forum-2-3.html 訪問discuz論壇,,那么先通過.htaccess過濾,,看看是否需要.htaccess引導(dǎo)一下用戶,如果滿足列出的一系列RewriteCond的條件那么就進行重寫,,discuz的沒有列出RewriteCond 所以應(yīng)該全部都進行重寫,。所以開始進行轉(zhuǎn)寫,forum-2-3.html 這個正好符合 列出的^forum-([0-9]+)-([0-9]+)\.html$ 正則表達式,。并且 $1 為 2 ,,$2為3 ,所以代入后面,,即 forumdisplay.php?fid=2&page=3 加上前面的RewriteBase 指定的文件目錄,,那么就帶他到制定目錄的forumdisplay.php?fid=2&page=3 。 4,、常見的.htaccess應(yīng)用舉例(部分例子引自四個例子實戰(zhàn)講解.htaccess文件rewrite規(guī)則)4.1防止盜鏈,,如果來得要訪問jpe jpg bmp png結(jié)尾的url 用戶不是來自我們的網(wǎng)站,那么讓他看一張我們網(wǎng)站的展示圖片,。RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L] 4.2 網(wǎng)站升級的時候,,只有特定IP才能訪問,,其他的用戶將看到一個升級頁面RewriteEngine on RewriteCond %{REQUEST_URI} !/upgrade.html$ RewriteCond %{REMOTE_HOST} !^24\.121\.202\.30 RewriteRule $ http://www./upgrade.html [R=302,L] 4.3把老的域名轉(zhuǎn)向新域名# redirect from old domain to new domain RewriteEngine On RewriteRule ^(.*)$http://www./$1[R=301,L] 5,、一些其他功能5.1 引出錯誤文檔的目錄ErrorDocument 400 /errors/badrequest.html ErrorDocument 404 http://yoursite/errors/notfound.html ErrorDocument 401 “Authorization Required 5.2 Blocking users by IP 根據(jù)IP阻止用戶訪問order allow,deny deny from 123.45.6.7 deny from 12.34.5. (整個C類地址) allow from all 5.3 防止目錄瀏覽# disable directory browsing Options All -Indexes 5.4設(shè)置默認首頁# serve alternate default index page DirectoryIndex about.html 5.5 把一些老的鏈接轉(zhuǎn)到新的鏈接上——搜索引擎優(yōu)化SEORedirect 301 /d/file.htmlhttp://www./r/file.html 5.6為服務(wù)器管理員設(shè)置電子郵件。ServerSignature EMail SetEnv [email protected] 本文章主要介紹了應(yīng)用最廣最實用的重寫功能,,記住.htaccess的權(quán)限要設(shè)置成644 |
|