.htaccess的主要作用就是實現url改寫,也就是當瀏覽器通過url訪問到伺服器某個資料夾時,作為主人,我們可以來接待這個url,具體地怎樣接待它,就是此檔案的作用。所有的訪問都是通過url實現,所以.htaccess的作用非同小可。正因為此,所以一般地**通過設 置.htaccess,通過乙個十分友好的url吸引使用者進來,然後用.htaccess把使用者帶到需要訪問的位置。
要想使用這個強大功能,就得開啟apache裡面的重寫模組。
前面的文章中曾經講到過windows和ubuntu開啟 rewrite模組使用.htaccess 。
其實開啟模組大體的步驟都是一樣的,無論是windows和linux。
開啟重寫引擎 :rewriteengine on
設定重寫的根目錄:rewritebase / — 說明 :因為定義了這個資料夾,所以對應的替換就有了乙個參照。
匹配所有符合條件的請求:rewritecond — 說明:rewritecond 定義了一系列規則條件,這個指令可以有一條或者多條,只有使用者拿來的url符合這些條件之後,我們的.htaccess才開始接待,否則使用者就直接自己去 訪問所需要的目錄了。
rewriteengine on
rewritecond % ^nbphp\.com$ [nc]
rewriterule ^(.*)$ [r=301,l]
上例便把nbphp.com 重定向到www.nbphp.com
% 是指取得使用者訪問的url的主網域名稱 然後空格後面是乙個正規表示式匹配,意識就是說是否是 nbphp.com 。
如果使用者訪問使用的url滿足所有列出的rewritecond 提出的條件,那麼進行下一步rewriterule 即開始進行引導,這才開始實現.htaccess檔案的重要功能。
同樣,前面是正規表示式,使用者分析使用者的除了主網域名稱nbphp.com之外的url ,^(.*)$的意思就是所有的內容。 然後空格後面寫的是我們引導使用者訪問的目錄,我們帶著他走到新的乙個網域名稱上。$1 指的是前面括號裡匹配url所得到的內容。
這樣就是乙個完整的小例子。關於rewritecond裡 如何呼叫url的某個部分,我們可以參考這篇文章(apache的mod_rewrite學習 (rewritecond重寫規則的條件);
推薦乙個經典的教程: 正規表示式30分鐘入門教程
這個教程的確很簡單,看完基本上寫一些簡單的正則就沒有問題了。正則是乙個需要長期使用的工具,隔段時間不用會忘記,所以我每次都看一遍這個教程。其實學過之後重要的就是一點內容。我簡單羅列了如下:
. 換行符以外的所有字元
\w匹配字母或數字或下劃線或漢字
\s匹配任意的空白符
\d匹配數字
\b匹配單詞的開始或結束
^匹配字串的開始
$匹配字串的結束
*重複零次或更多次
*重複零次或更多次
+重複一次或更多次
?重複零次或一次
重複n次
重複n次或更多次
重複n到m次
應用替換時,前面第乙個()中匹配的內容後面就用$1引用,第二個()中匹配的就用$2應用……
我們來分析一下 discuz7.0 搜尋引擎優化 htaccess 裡面的重寫。
rewriterule ^forum-([0-9]+)-([0-9]+)\.html$ forumdisplay.php?fid=$1&page=$2
首先加入使用者通過 nbphp.com/forum-2-3.html 訪問discuz論壇,那麼先通過.htaccess過濾,看看是否需要.htaccess引導一下使用者,如果滿足列出的一系列rewritecond的 條件那麼就進行重寫,discuz的沒有列出rewritecond 所以應該全部都進行重寫。所以開始進行轉寫,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.1防止盜鏈,如果來得要訪問jpe jpg bmp png結尾的url 使用者不是來自我們的**,那麼讓他看一張我們**的展示。
4.2 **公升級的時候,只有特定ip才能訪問,其他的使用者將看到乙個公升級頁面
rewriteengine on
rewritecond % !/upgrade.html$
rewritecond % !^24\.121\.202\.30
rewriterule $ [r=302,l]
4.3把老的網域名稱轉向新網域名稱
# redirect from old domain to new domain
rewriteengine on
rewriterule ^(.*)$
5.1 引出錯誤文件的目錄
5.2 blocking users by ip 根據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設定預設首頁
# serve alternate default index page
directoryindex about.html
5.5 把一些老的鏈結轉到新的鏈結上——搜尋引擎優化seo
redirect 301 /d/file.html
5.6為伺服器管理員設定電子郵件。
serversignature email
setenv [email protected]
本文章主要介紹了應用最廣最實用的重寫功能,記住.htaccess的許可權要設定成644
apache重寫規則
本文旨在提供如何用apache重寫規則來解決一些常見的url重寫方法的問題,通過常見的 例項給使用者一些使用重寫規則的基本方法和線索。二 為什麼需要用重寫規則?乙個 如果是長期需要放在internet上提供服務,必定會有不斷地更新和維護,如臨 時轉移到其它伺服器進行維護,重新組織目錄結構,變換url...
apache重寫規則簡單理解
1 前提 開啟apache重寫,並把httpd.conf裡的相關的allowoverride denied改為allowoverride all 2 重寫規則可寫在專案根目錄的.htaccess檔案或直接配在httpd.conf 3 規則的三個重點 rewriteengine on 開啟引擎 rew...
apache偽靜態規則解析
1 簡單的重定向規則 rewriteengine on 啟動規則 rewritebase 根目錄啟動偽靜態 rewriterule index index.php 訪問index 那麼就是訪問index.php rewriterule register s youka register.html 訪...