.htaccess文件你們都不陌生吧。不認識的本身去搜一下……順便告訴你,這是個好東西,值得一學。 html
彷佛網上關於.htaccess編寫方法的教程頗有限,相信博主們也沒有幾個是本身寫的吧?
我在這裏就搜了幾個經常使用規則,總結一下rewrite規則的用法。固然這只是.htaccess功能的一小部分,可是至關實用。
若是熟練掌握rewrite規則的編寫,可以增強對網站URL的控制,對用戶體驗、SEO都十分有利。 正則表達式
注:全部規則來源於網絡,我只做解釋。 服務器
1、防盜鏈功能 網絡
1 2 3 4 |
RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L] |
逐行講解一下: dom
1.打開Rewrite功能。有可能服務器設置裏已是全局下打開了,可是多寫也沒事。
2.RewriteCond指令,定義生效條件,用於尋找匹配條件的地址。後面內容用正則表達式匹配。表明含義是發送的請求不禁mysite.com而來,那就是盜鏈啦。末尾的[NC]表明忽略大小寫。
3.發送請求的主機前綴不爲空。
4.RewriteRule指令,定義重寫規則,把匹配的地址按此規則重寫。本例中把這些後綴爲這些圖片格式的,都替換到某一個圖片下。[L]表示這是最後一段規則。 學習
只這四行就實現了防盜鏈是否是很神奇(- -||),編寫起來是否是又以爲複雜。
這裏總結了幾個經常使用參數(不是所有): 網站
RewriteCond下:
[NC] 不分字母大小寫
[OR] 用於鏈接下一條規則
RewriteRule下:
[R] 強制重定向,[R=code] code默認爲302
[F] 禁用URL,返回HTTP 403 錯誤
[L] 這是最後一條規則,以後內容無用 google
還有一篇關於正則表達式的教程(很詳細):http://www.unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm spa
2、網址規範化 .net
1 2 3 4 |
Options +FollowSymLinks rewriteEngine on rewriteCond %{http_host} ^yourdomain.com [NC] rewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L] |
這個是把全部二級域名都重定向到www.yourdomain.com的例子,如今看來是否是很簡單了?
須要注意的是,這裏的Options +FollowSymLinks不是必須的,但在某些服務器若是不設置FollowSymLinks,可能引發500錯誤。
再來看一個好玩的重定向
1 2 3 4 |
RewriteEngine On RewriteBase / RewriteCond %{HTTP_USER_AGENT} (Googlebot) RewriteRule ^ http://abc.com/ [R=301,L] |
1.打開Rewrite功能。
2.RewriteBase指令,設置目錄級重寫的基準URL。能夠理解成把該目錄(這個.htaccess所在目錄)假定爲基準的URL前綴。本例中這樣的寫法無用。
3.RewriteCond指令。匹配全部USER_AGENT爲Googlebot的發送請求。
4.RewriteRule指令。本例中把這些請求都重定向到了abc.com。
在本例中,這個配置應該是黑客所爲,把google蜘蛛指向某個網站,等於僞造PR。
3、臨時錯誤頁面
當你的網站在升級、修改的時候,你最好讓訪客轉到指定的頁面,而不是沒作完的頁面或者是錯誤頁。
這時咱們作一個302轉跳就好。
1 2 3 4 |
RewriteEngine on RewriteCond %{REQUEST_URI} !/maintenance.html$ RewriteCond %{REMOTE_ADDR} !^123.123.123.123 RewriteRule $ /error.html [R=302,L] |
1.繼續打開Rewrite功能。- -|
2.REQUEST_URI,請求的URL值。這裏指全部訪問maintenance.html頁面的請求。
3.REMOTE_ADDR,向服務器發送請求的IP地址。本例中此處應設爲你本身的IP,這樣就只有你能訪問。
4.RewriteRule指令。本例中把這些請求都重定向到了error.html 。
在本例,咱們總結幾個經常使用的正則表達式和特殊符號。
(.*) 用於匹配某一區域內全部內容。如 abc/def/ghi 可用 (.*)/(.*)/(.*) 匹配。
([a-zA-Z_]+) 匹配英文單詞,容許用-和_鏈接。
([0-9]+) 匹配多位數字,一般用於匹配ID。
([0-9]) 只匹配一位的數字。
^ 表示正則的開始
$ 表示正則的結束
4、重定向RSS地址到Feedburner
除了能夠更改模板裏的RSS地址外,.htaccess也能實現RSS地址的更改,並更加方便。
1 2 3 4 |
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC] RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC] RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds2.feedburner.com/yourname [R=302,NC,L] |
有了上面的總結,本例其實就很簡單了吧。
惟一要注意的是這樣操做要確保填寫正確的HTTP_USER_AGENT。其實你不常換模板的話。。可能仍是直接改模板更省事。
在最後,爲懶蟲們推薦幾個好東東:
在線.htaccess生成器:htaccessEditor
在線正則表達式檢查器:http://www.sman.cn/Blog/attachments/month_0711/320071117123354.html
mod_rewrite模塊中文參考手冊:http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/mod/mod_rewrite.html
P.S. 其實我覺得rewrite也只是APACHE一個模塊而已,作到邊查邊寫足矣,實在不行直接去搜一個規則也何嘗不可。沒有必要費太大力氣去學。不過其中的正則表達式仍是很是實用的,值得深刻學習。
原文連接:http://www.suoyishuo.com/archives/how-to-write-htaccess-rewrite.html