php .htaccess檔案使用詳解

來源:互聯網
上載者:User

標籤:數字   漢字   set   線上   意思   步驟   nat   根目錄   apache   

1、.htaccess檔案使用前提

.htaccess的主要作用就是實現url改寫,也就是當瀏覽器通過url訪問到伺服器某個檔案夾時,作為主人,我們可以來接待這個url,具體地怎樣接待它,就是此檔案的作用。所有的訪問都是通過URL實現,所以.htaccess的作用非同小可。正因為此,所以一般地網站通過設定.htaccess,通過一個十分友好的url吸引使用者進來,然後用.htaccess把使用者帶到需要訪問的位置。

要想使用這個強大功能,就得開啟apache裡面的重寫模組。

前面的文章中曾經講到過windows和ubuntu開啟 rewrite模組使用.htaccess 。

其實開啟模組大體的步驟都是一樣的,無論是Windows和linux。

2、.htaccess基本文法介紹

開啟重寫引擎 :RewriteEngine on

設定重寫的根目錄:RewriteBase /     — 說明 :因為定義了這個檔案夾,所以對應的替換就有了一個參照。

匹配所有合格請求:RewriteCond       — 說明:RewriteCond 定義了一系列規則條件,這個指令可以有一條或者多條,只有使用者拿來的url符合這些條件之後,我們的.htaccess才開始接待,否則使用者就直接自己去訪問所需要的目錄了。

舉個例子,為了能讓搜尋引擎更多地抓取我們的網頁而避免重複抓,我們通常把沒有www的網域名稱重新導向到www.XXX.com,如下就實現了這個功能:

RewriteEngine On

RewriteCond %{HTTP_HOST}  ^nbphp\.com$ [NC]

RewriteRule ^(.*)$  http://www.nbphp.com/$1 [R=301,L]

上例便把nbphp.com 重新導向到www.nbphp.com

%{HTTP_HOST} 是指取得使用者訪問的URL的主網域名稱  然後空格後面是一個Regex匹配,意識就是說是否是 nbphp.com 。

如果使用者訪問使用的URL滿足所有列出的RewriteCond 提出的條件,那麼進行下一步RewriteRule 即開始進行引導,這才開始實現.htaccess檔案的重要功能。

同樣,前面是Regex,使用者分析使用者的除了主網域名稱nbphp.com之外的URL ,^(.*)$的意思就是所有的內容。 然後空格後面寫的是我們引導使用者訪問的目錄,我們帶著他走到新的一個網域名稱上。$1 指的是前面括弧裡匹配url所得到的內容。

這樣就是一個完整的小例子。關於RewriteCond裡 如何調用url的某個部分,我們可以參考這篇文章(Apache的Mod_rewrite學習 (RewriteCond重寫規則的條件);

3、現學現用,學習Regex。

推薦一個經典的教程: Regex30分鐘入門教程

這個教程的確很簡單,看完基本上寫一些簡單的正則就沒有問題了。正則是一個需要長期使用的工具,隔段時間不用會忘記,所以我每次都看一遍這個教程。其實學過之後重要的就是一點內容。我簡單羅列了如下:

.  分行符號以外的所有字元

\w匹配字母或數字或底線或漢字

\s匹配任意的空白符

\d匹配數字

\b匹配單詞的開始或結束

^匹配字串的開始

$匹配字串的結束

*重複零次或更多次

*重複零次或更多次

+重複一次或更多次

?重複零次或一次

{n}重複n次

{n,}重複n次或更多次

{n,m}重複n到m次

應用替換時,前面第一個()中匹配的內容後面就用$1引用,第二個()中匹配的就用$2應用……

推薦一個實用的正則線上測試網站 http://www.regextester.com/

我們來分析一下 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$ Regex。並且 $1 為 2  ,$2為3 ,所以代入後面,即 forumdisplay.php?fid=2&page=3 加上前面的RewriteBase 指定的檔案目錄,那麼就帶他到制定目錄的forumdisplay.php?fid=2&page=3 。

4、常見的.htaccess應用舉例(部分例子引自四個例子實戰講解.htaccess檔案rewrite規則)4.1防止盜鏈,如果來得要訪問jpe jpg bmp png結尾的url 使用者不是來自我們的網站,那麼讓他看一張我們網站的展示圖片。

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]

RewriteCond %{HTTP_REFERER} !^$

RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

4.2 網站升級的時候,只有特定IP才能訪問,其他的使用者將看到一個升級頁面

RewriteEngine on

RewriteCond %{REQUEST_URI} !/upgrade.html$

RewriteCond %{REMOTE_HOST} !^24\.121\.202\.30

RewriteRule $ http://www.nbphp.com/upgrade.html [R=302,L]

4.3把老的網域名稱轉向新網域名稱

# redirect from old domain to new domain

RewriteEngine On

RewriteRule ^(.*)$http://www.yourdomain.com/$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 根據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.htmlhttp://www.htaccesselite.com/r/file.html

5.6為伺服器管理員設定電子郵件。

ServerSignature EMail

SetEnv [email protected]

php .htaccess檔案使用詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.