(注:.haccess重要的三個指令[RewriteEngine、RewriteCond、RewriteRule])
就是實作URL的跳轉和隐藏真實位址,基于Perl語言的正規表達式規範。平時幫助我們實作拟靜态,拟目錄,域名跳轉,防止盜鍊等
Apache下的Rewrite配置主要有兩種,一種是針對整個apache伺服器的配置,此種配置的Rewrite規則是直接在httpd.conf下書寫。配置步驟如下:
(1)去除httpd.conf檔案中"#LoadModule rewrite_module modules/mod_rewrite.so"前面的"#"号;
(2)然後再在httpd.conf中書寫如下規則:
RewriteEngine on
#當通路任何以t開頭,以.html結尾的檔案時,将$1用與(.*)比對的字元替換後,通路相應的test.php頁面
RewriteRule ^/t(.*).html$ /test.php?id=$1
另一種是針對apache伺服器下的某一目錄的配置,此種配置的Rewrite規則需在此目錄下建立一個.htaccess檔案來書寫。配置步驟如下:
(1)去除httpd.conf檔案中"#LoadModule rewrite_module modules/modrewrite.so"前面的"#"号;
(2)修改httpd.conf檔案中的"AllowOverride None"為"AllowOverride all",同時最好将Options也置為"all",否則可能會出問題。
(3)在目錄中建立.htaccess檔案,并用記事本打開,書寫如下規則:
RewriteRule ^/test([0-9]).html$ /test.php?id=$1
RewriteRule ^/new([0-9])/$ /new.php?id=$1 [R]
舉例:
#當我們通路的位址不是以www.163.com開頭的,那麼執行下一條規則
RewriteCond %{HTTP_HOST} !^www.163.com [NC]
1) R 強制外部重定向
2) F 禁用URL,傳回403HTTP狀态碼。
3) G 強制URL為GONE,傳回410HTTP狀态碼。
4) P 強制使用代理轉發。
5) L 表明目前規則是最後一條規則,停止分析以後規則的重寫。
6) N 重新從第一條規則開始運作重寫過程。
7) C 與下一條規則關聯
如果規則比對則正常處理,以下修正符無效
8) T=MIME-type(force MIME type) 強制MIME類型
9) NS 隻用于不是内部子請求
10) NC 不區分大小寫
11) QSA 追加請求字元串
12) NE 不在輸出轉義特殊字元 \%3d$1 等價于 =$1
*代表前面0或更多個字元
+代表前面1或更多個字元
?代表前面0或1個字元
^代表字元串的開始位置
$代表字元串結束的位置
。為通配符,代表任何字元
\将跟在其後的字元還原為字元本身,例如“+”代表的就是“+”,而非其它意思。
^在方括号裡表示非的意思。例如[^.]代表非通配符。
如果檔案不存在重定向到404頁面
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? /404.php [L]
這裡-f比對的是存在的檔案名,-d比對的存在的路徑名。這段代碼在進行404重定向之前,會判斷你的檔案名以及路徑名是否存在【請注意這裡】。你還可以在404頁面上加一個?url=$1參數:
RewriteRule ^/?(.*)$ /404.php?url=$1 [L]
僞靜态嘗試
RewriteEngine on
RewriteRule ^test([0-9]*).html$ /index.php?id=$1
容易引申的僞靜态例子
将.html字尾名轉換成.php
RewriteRule ^/?([a-z/]+).html$ $1.php [L]
本文轉自 Lee_吉 部落格,原文連結:http://blog.51cto.com/12173069/2057613 如需轉載請自行聯系原作者
<a href="http://blog.51cto.com/search/result?q=apache%E9%87%8D%E5%86%99" target="_blank">apache重寫</a>