1. 程式人生 > >URL rewrite,Apache 偽靜態規則配置

URL rewrite,Apache 偽靜態規則配置

在做網站時,為了闢免一個檔案有兩個URL,很多時候需要用到301跳轉,如這個天氣預報網是將http://www.tqybw.com 301 到http://tqybw.net,
apache下URL的重寫規則怎麼寫。這個主要是用於做偽靜態。重寫規則是放在.htaccess檔案下或Apache的配置檔案(httpd.conf或sites_conf目錄裡的一些特定的網站配置檔案),此文主要討論.htacess檔案,一般放在站點根目錄下。

.htacess檔案,開頭內容如下:

RewriteEngine on
RewriteBase /

RewriteEngineon是代表開啟rewrite,而RewriteBase /是表示所有規則前都存在“/”,寫了這條之後,你後面所有規則的開頭,只需要寫“^”就後了,但要注意的是,此規則僅在.htacess檔案中被支援,如果是伺服器配置檔案,此規則會被忽略、不必寫。

在正是寫規則前,先為大家講一下重寫中設計到的特殊字元的含義。和普通正則是通用的!

*代表前面0或更多個字元

+代表前面1或更多個字元

?代表前面0或1個字元

^代表字串的開始位置

$代表字串結束的位置

.為萬用字元,代表任何字元

\將跟在其後的字元還原為字元本身,例如“\+”代表的就是“+”,而非其它意思。

^在方括號裡表示非的意思。例如[^.]代表非萬用字元。

示例:
那麼假如我們希望將“http://tqybw.net/city.php?pinyin=xiamen″此類URL偽靜態為“http://tqybw.net/xiamen/″的形式,則規則如下:

RewriteRule ^([a-z]+)(|\/)$/city.php?pinyin=$1 [L]

上面的例子中,^表示域名後來的URL的開始,$表示字串結束,也就是域名後面的URL結束。[a-z]表示一組字母,因為只要URL存在,其必然存在一個pinyin字母。緊接其後的+表示表示出現1個或多個字母親。[a-z]+連在一起,表示字元以字母形式出現,字母範圍為a-z,出現次數為1或多次。$表示字串結束,(|\/)$表示在根域名後到域名結束,有0或1個字元。$1表示存在記憶體中的內容,也就是說第一個圓括號中的內容。[L]表示如果規則匹配就停止,否則需要繼續執行剩下的規則,通常這個沒必要深究。

那除非偽靜態外,有時候我們還需要利用.htacess進行301重定向。符號含義不變,舉例如下:

RewriteEngine on

RewriteCond %{HTTP_HOST}^www.tqybw\.net$ [NC]

RewriteRule ^(.*) http://tqybw.net/$1[R=301,L]

上述規則是將www.tqybw.com 301 到tqybw.net,符號的含義相信不必再做解釋了。

那麼經過這兩條規則,你應該有所啟發了,如果你的網站做改版,導致你的URL結構發生了變化,怎麼辦?答案很簡單,我們可以利用.htacess檔案,通過寫rewrite規則,將老的URL301到新的URL上。

RewriteRule ^(.*?)/?index\.html$/$1?[L,R=301]

這個規則是將域名下搜有a/index.html 301 到 a/的URL下。規則是死的,最重要的是大家要活學活用,相信熟練掌握rewrite規則後,你會發現網站所有的URL與返回碼將會全部在你的掌控下!

在nginx下規則類似!