發布者認證信息(營業執照和身份證)未完善,請登錄后完善信息登錄
Apache Rewrite实现URL的301跳转和域名跳转-亿华网

久久天天躁狠狠躁夜夜,国精品无码一区二区三区左线,色综合网天天综合色中文,国产suv精品一区二区883,午夜精品一区二区三区的区别

首頁 » 資訊 » 編程開發 > Apache Rewrite實現URL的301跳轉和域名跳轉

Apache Rewrite實現URL的301跳轉和域名跳轉

  發布時間 : 2017-04-21 14:04:28 83
內容提要
如果要想用到rewrite模塊,必須先安裝或加載rewrite模塊。方法有兩種一種是編譯apache的時候就直接安裝rewrite模塊,別一種是編
 如果要想用到(dao)rewrite模塊(kuai),必須(xu)先安裝(zhuang)或加(jia)載rewrite模塊(kuai)。方(fang)法有兩種一種是(shi)編譯(yi)(yi)apache的時候就直接安裝(zhuang)rewrite模塊(kuai),別一種是(shi)編譯(yi)(yi)apache時以(yi)DSO模式安裝(zhuang)apache,然后再利用源(yuan)碼和apxs來安裝(zhuang)rewrite模塊(kuai)。 

基于服務器級的(httpd.conf)有兩種方法,一種是在httpd.conf的全局下直接利用RewriteEngine on來打開rewrite功能;另一種是在局部里利用RewriteEngine on來打開rewrite功能,下面將會舉例說明,需要注意的是,必須在每個virtualhost里用RewriteEngine on來打開rewrite功能。否則virtualhost里沒有RewriteEngine on它里面的規則也不會生效。 

基于目錄級的(.htaccess),要注意一點那就是必須打開此目錄的FollowSymlinks屬性且在.htaccess里要聲明RewriteEngine on。 

2、舉例說(shuo)明(ming): 

例一.下面是在一個虛擬主機里定義的規則。功能是把client請求的主機前綴不是www.yiehua.com和70.40.213.183都跳轉到主機前綴為//www.yiehua.com,避免相同內容的網頁有多個指向的域名,如//yiehua.com。 
復制代碼代碼如下:

NameVirtualHost 70.40.213.183:80 
ServerAdmin slj@yiehua.com 
documentRoot “/web” 
ServerName yiehua.com 

RewriteEngine on #打開rewirte功能 
RewriteCond %{HTTP_HOST} !^www.yiehua.com[NC] #聲明Client請求的主機中前綴不是www.yiehua.com,其中 [NC] 的意思是忽略大小寫 
RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC] #聲明Client請求的主機中前綴不是70.40.213.183,其中 [NC] 的意思是忽略大小寫 
RewriteCond %{HTTP_HOST} !^$ #聲明Client請求的主機中前綴不為空 
RewriteRule ^(.*) //www.yiehua.com/ [L] #含義是如果Client請求的主機中的前綴符合上述條件,則直接進行跳轉到//www.yiehua.com/,[L]意味著立即停止重寫操作,并不再應用其他重寫規則。這里的.*是指匹配所有URL中不包含換行字符,()括號的功能是把所有的字符做一個標記,以便于后面的應用.就是引用前面里的 (.*)字符。 

例二.將輸入 en.yiehua.com的(de)域名(ming)時跳轉到(dao)www.yiehua.com 
復制代碼代碼如下:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^en.yiehua.com[NC] 
RewriteRule ^(.*) //www.yiehua.com/ [L] 

例三.賽(sai)卡軟件近期更換了域(yu)(yu)名,新域(yu)(yu)名為www.yiehua.com, 更加簡短好記。這時需要將原(yuan)(yuan)來的域(yu)(yu)名ss.yiehua.com, 以(yi)(yi)及論壇(tan)(tan)所在(zai)地址ss.yiehua.com/bbs/定(ding)向到(dao)新的域(yu)(yu)名,以(yi)(yi)便用戶(hu)可以(yi)(yi)找到(dao),并且使原(yuan)(yuan)來的論壇(tan)(tan) URL 繼(ji)續(xu)有(you)效而(er)(er)不出現(xian) 404 未找到(dao),比如(ru)原(yuan)(yuan)來的//ss.yiehua.com/bbs/tread-60.html, 讓它在(zai)新的域(yu)(yu)名下繼(ji)續(xu)有(you)效,點擊后轉(zhuan)發到(dao)//bbs.yiehua.com/tread-60.html,而(er)(er)其他網頁,如(ru)原(yuan)(yuan)先的http: //ss.yiehua.com/purchase不會到(dao)二(er)級域(yu)(yu)名bbs.yiehua.com/purchase上,而(er)(er)是到(dao) www.yiehua.com/purchase 
按照這樣(yang)(yang)的要求重(zhong)定向(xiang)規則應該這樣(yang)(yang)寫: 
復制代碼代碼如下:

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/bbs/ 
RewriteRule ^bbs/(.*) //bbs.yiehua.com/$1 [R=permanent,L] 
RewriteCond %{REQUEST_URI} !^/bbs/ 
RewriteRule ^(.*) //www.yiehua.com/$1 [R=permanent,L] 

3.Apache mod_rewrite規則重寫的標志一(yi)覽 
復制代碼代碼如下:

1) R[=code](force REDirect) 強制外部重定向 
強制在替代字符串加上//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) 與下一條規則關聯 

如(ru)果(guo)規則匹配(pei)則正常處理,該標志(zhi)無(wu)效,如(ru)果(guo)不匹配(pei),那么下面所有(you)關聯的(de)規則都跳過。 
復制代碼代碼如下:

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) 設置環境變量 

4.Apache rewrite例(li)子集合 

URL重定向(xiang) 

例子一: 
同時達(da)到(dao)下面兩個要求: 
1.用//www.zzz.com/xxx.php 來訪問 //www.zzz.com/xxx/ 
2.用(yong)//yyy.zzz.com 來(lai)訪問 //www.zzz.com/user.php?username=yyy 的功能(neng) 
復制代碼代碼如下:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www.zzz.com 
RewriteCond %{REQUEST_URI} !^user.php$ 
RewriteCond %{REQUEST_URI} .php$ 
RewriteRule (.*).php$ //www.zzz.com/$1/ [R] 
RewriteCond %{HTTP_HOST} !^www.zzz.com 
RewriteRule ^(.+) %{HTTP_HOST} [C] 
RewriteRule ^([^.]+).zzz.com //www.zzz.com/user.php?username=$1 
layui

微信掃碼關注 億華聯眾(zhong) 公眾(zhong)號

頭條推薦