首先,先說URL的重寫規則怎麼寫。這個主要是用於作僞靜態。php
重寫規則是放在.htaccess文件下或Apache的配置文件(httpd.conf或sites_conf目錄裏的一些特定的網站配置文件)html
打開你的.htacess文件,開頭內容以下:服務器
Options +FollowSymLinkside
RewriteEngine on網站
RewriteBase /spa
RewriteEngine on是表明開啓rewrite,而RewriteBase / 是表示全部規則前都存在「/」,寫了這條以後,你後面全部規則的開頭,只須要寫「^」就後了,但要注意的是,此規則僅在.htacess文件中被支持,若是是服務器配置文件,此規則會被忽略、沒必要寫。設計
在正是寫規則前,先爲你們講一下重寫中設計到的特殊字符的含義。htm
*表明前面0或更多個字符seo
+表明前面1或更多個字符內存
?表明前面0或1個字符
^表明字符串的開始位置
$表明字符串結束的位置
.爲通配符,表明任何字符
\將跟在其後的字符還原爲字符自己,例如「\+」表明的就是「+」,而非其它意思。
^在方括號裏表示非的意思。例如[^.]表明非通配符。
那麼假如咱們但願將「http://www.seozhao.com/b.php?id=1″此類URL僞靜態爲「http://www.seozhao.com/b/1″的形式,則規則以下:
RewriteRule ^b/([0-9]+)/?$ /b.php?id=$1 [L]
上面的例子中,^表示域名後來的URL的開始,$表示字符串結束,也就是域名後面的URL結束。[0-9]表示一個數字,由於只要URL存在,其必然存在一個id數字。緊接其後的+表示表示出現1個或多個數字。[0-9]+連在一塊兒,表示字符以數字形式出現,數字範圍爲0-9,出現次數爲1或屢次。$表示字符串結束,?$表示在根域名後到域名結束,有0或1個字符。$1表示存在內存中的內容,也就是說第一個圓括號中的內容。[L]表示若是規則匹配就中止,不然須要繼續運行剩下的規則,一般這個不必深究。
那除非僞靜態外,有時候咱們還須要利用.htacess進行301重定向。符號含義不變,舉例以下:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^seozhao\.com$ [NC]
RewriteRule ^(.*)$ http://www.seozhao.com/$1 [R=301,L]
上述規則是將seozhao.com 301 到 www.seozhao.com,符號的含義相信沒必要再作解釋了。
那麼通過這兩條規則,你應該有所啓發了,若是你的網站作改版,致使你的URL結構發生了變化,怎麼辦?答案很簡單,咱們能夠利用.htacess文件,經過寫rewrite規則,將老的URL 301到新的URL上。
RewriteRule ^(.*?)/?index\.html$ /$1? [L,R=301]
這個規則是將域名下搜有a/index.html 301 到 a/ 的URL下。規則是死的,最重要的是你們要活學活用,相信熟練掌握rewrite規則後,你會發現網站全部的URL與返回碼將會所有在你的掌控下!