本文章來給各位朋友詳細介紹Apache Rewrite偽靜態配置方法與我們最后跳到的apache URL跳轉配置方法,這里跳轉url不是指301,404了,而一種偽靜態的正常跳轉,很多網站做三級域名時會有到哦。
Rewirte主要的功能就是實現URL的跳轉,Rewirte代碼的正則表達式是基于Perl語言.基于服務器級的(httpd.conf)和目 錄級的 (.htaccess)兩種方式,而我們Apache一般用的是目錄級的 (.htaccess)方式,所以海天這里學習和記錄的也就是(.htaccess)方式,俗稱偽靜態.
既然Rewirte主要的功能就是實現URL的跳轉,所以海天就直接從URL跳轉入手,廢話不多說,開始!
一般的.htaccess偽靜態跳轉寫法為(下例為輸入 a.Vevb.com 的域名時跳轉到www.companysz.com):
- RewriteEngine on
- RewriteCond %{HTTP_HOST} ^a.Vevb.com [NC]
- RewriteRule ^(.*) http://www.companysz.com/ [L]
Apache Rewrite規則重寫的標志
1) R[=code](force redirect) 強制外部重定向
強制在替代字符串加上http://thishost[:thisport]/前綴重定向到外部的URL.如果code不指定,將用缺省的302 HTTP狀態碼.
2) F(force URL to be forbidden)禁用URL,返回403HTTP狀態碼.
3) G(force URL to be gone) 強制URL為GONE,返回410HTTP狀態碼.
4) P(force proxy) 強制使用代理轉發.
5) L(last rule) 表明當前規則是最后一條規則,停止分析以后規則的重寫.
6) N(next round) 重新從第一條規則開始運行重寫過程.
7) C(chained with next rule) 與下一條規則關聯,如果規則匹配則正常處理,該標志無效,如果不匹配,那么下面所有關聯的規則都跳過.
8 ) T=MIME-type(force MIME type) 強制MIME類型
9) NS (used only if no internal sub-request) 只用于不是內部子請求
10) NC(no case) 不區分大小寫
11) QSA(query string append) 追加請求字符串
12) NE(no URI escaping of output) 不在輸出轉義特殊字符,例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] 將能正確的將/foo/zoo轉換成/bar?arg=P1=zoo
13) PT(pass through to next handler) 傳遞給下一個處理,例如:
- RewriteRule ^/abc(.*) /def$1 [PT] # 將會交給/def規則處理
- Alias /def /ghi
14) S=num(skip next rule(s)) 跳過num條規則
15) E=VAR:VAL(set environment variable) 設置環境變量
以下直接舉例說明:
例一、在一個虛擬主機里定義的Rewrite規則.功能是把client請求的URL地址前綴不是www.companysz.com和 70.40.213.183都跳轉到主機前綴為 http://www.companysz.com.這樣就避免相同內容的網頁有多個指向的域名,如http://Vevb.com,而不利于SEO.
1 RewriteEngine on
#打開rewirte功能
2 RewriteCond %{HTTP_HOST} !^www.aaa.cn [NC]
#聲明Client請求的URL地址中前綴不是www.kiya.cn,其中 [NC] 的意思是忽略大小寫
3 RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC]
#聲明Client請求的URL地址中前綴不是70.40.213.183
4 RewriteCond %{HTTP_HOST} !^$
#聲明Client請求的主機中前綴不為空
5 RewriteRule ^(.*) http://www.companysz.com/ [L]
#含義是如果Client請求的主機中的前綴符合上述條件,則直接進行跳轉到http://Vevb.com/,[L]意味著立即停止重寫操作,并 不再應用其他重寫規則.這里的.*是指匹配所有URL中不包含換行字符,()括號的功能是把所有的字符做一個標記,以便于后面的應用.就是引用前面里的 (.*)字符.
例二、啟用新域名為www.companysz.com之后.需要將原來的域名ss.Vevb.com, 以及論壇所在地址ss.Vevb.com/bbs/定向到新的域名,以便用戶可以找到,并且使原來的論壇 URL 繼續有效而不出現 404 未找到.比如原來的http://ss.Vevb.com/bbs/tread-60.html, 讓它在新的域名下繼續有效,點擊后轉發到http://bbs.Vevb.com/tread-60.html;而其他網頁,如原先的http: //ss.Vevb.com/purchase不會跳轉到二級域名bbs.Vevb.com/purchase上,而是到 www.companysz.com/purchase.
- RewriteEngine On
- RewriteCond %{REQUEST_URI} ^/bbs/
- RewriteRule ^bbs/(.*) http://bbs.Vevb.com/$1 [R=permanent,L]
- RewriteCond %{REQUEST_URI} !^/bbs/
- RewriteRule ^(.*) http://www.companysz.com/$1 [R=permanent,L]
例三、同時達到下面兩個要求:
1.用http://www.companysz.com/xxx.php 來訪問 http://www.companysz.com/xxx/
2.用http://yyy.Vevb.com 來訪問 http://www.companysz.com/user.php?username=yyy 的功能
- RewriteEngine On
- RewriteCond %{HTTP_HOST} ^www.companysz.com
- RewriteCond %{REQUEST_URI} !^user.php$
- RewriteCond %{REQUEST_URI} .php$
- RewriteRule (.*).php$ http://www.companysz.com/$1/ [R]
- RewriteCond %{HTTP_HOST} !^www.companysz.com
- RewriteRule ^(.+) %{HTTP_HOST} [C]
- RewriteRule ^([^.]+).hzhuti.com http://www.companysz.com/user.php?username=$1
例四、將URL地址 /type.php?typeid=* 跳轉至 /type*.html,URL地址 /type.php?typeid=*&page=* 跳轉至 /type*page*.html
- RewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT]
- RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [PT]
相信通過以上四個簡單的例子,我們已經能夠寫出簡單的Apache Rewrite的URL跳轉介紹了apache基礎的rewrit知識,再發些例子給大家看看吧.
- RewriteEngine on
- # 把 yourdomain.com 改為你要綁定的域名.
- RewriteCond %{HTTP_HOST} ^(www.)?mq35.com$
- # 把 subfolder 改為要綁定的目錄.
- RewriteCond %{REQUEST_URI} !^/bbs/
- # 不要改以下兩行.
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteCond %{REQUEST_FILENAME} !-d
- # 把 subfolder 改為要綁定的目錄.
- RewriteRule ^(.*)$ /bbs/$1
- # 把 yourdomain.com 改為你要綁定的域名
- # 把 subfolder 改為要綁定的目錄.
- # subfolder/ 后面是首頁文件index.php, index.html......
- RewriteCond %{HTTP_HOST} ^(www.)?mq35.com$
- RewriteRule ^(/)?$ bbs/index.php [L]
上面的整套語句是綁定一個子目錄,如需綁定多個子目錄,你可以重復添加以上的全套語句。
新聞熱點
疑難解答