.htaccess使用方法介紹

一、.htaccess文件使用前提

.htaccess的主要做用就是實現url改寫,也就是當瀏覽器經過url訪問到服務器某個文件夾時,做爲主人,咱們能夠來接待這個url,具體地怎樣接待它,就是此文件的做用。全部的訪問都是經過URL實現,因此.htaccess的做用非同小可。正由於此,因此通常地網站經過設置.htaccess,經過一個十分友好的url吸引用戶進來,而後用.htaccess把用戶帶到須要訪問的位置。php

要想使用這個強大功能,就得開啓apache裏面的重寫模塊。html

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

其實開啓模塊大致的步驟都是同樣的,不管是Windows和linux。正則表達式

二、.htaccess基本語法介紹

開啓重寫引擎 :RewriteEngine onapache

設置重寫的根目錄:RewriteBase /     — 說明 :由於定義了這個文件夾,因此對應的替換就有了一個參照。ubuntu

匹配全部符合條件的請求:RewriteCond       — 說明:RewriteCond 定義了一系列規則條件,這個指令能夠有一條或者多條,只有用戶拿來的url符合這些條件以後,咱們的.htaccess纔開始接待,不然用戶就直接本身去訪問所須要的目錄了。windows

舉個例子,爲了能讓搜索引擎更多地抓取咱們的網頁而避免重複抓,咱們一般把沒有www的域名重定向到www.XXX.com,以下就實現了這個功能:瀏覽器

RewriteEngine On服務器

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

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

上例便把nbphp.com 重定向到www.nbphp.com

%{HTTP_HOST} 是指取得用戶訪問的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,}重複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$ 正則表達式。而且 $1 爲 2  ,$2爲3 ,因此代入後面,即 forumdisplay.php?fid=2&page=3 加上前面的RewriteBase 指定的文件目錄,那麼就帶他到制定目錄的forumdisplay.php?fid=2&page=3 。

四、常見的.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.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 SERVER_ADMINdefault@domain.com

相關文章
相關標籤/搜索