Apache Rewrite實(shí)現(xiàn)URL的301跳轉(zhuǎn)和域名跳轉(zhuǎn)
2024-08-27 18:23:49
供稿:網(wǎng)友
Rewirte主要的功能就是實(shí)現(xiàn)URL的跳轉(zhuǎn),它的正則表達(dá)式是基于Perl語言。可基于服務(wù)器級(jí)的(httpd.conf)和目錄級(jí)的 (.htaccess)兩種方式 如果要想用到rewrite模塊,必須先安裝或加載rewrite模塊。方法有兩種一種是編譯apache的時(shí)候就直接安裝rewrite模塊,別一種是編譯apache時(shí)以DSO模式安裝apache,然后再利用源碼和apxs來安裝rewrite模塊。
基于服務(wù)器級(jí)的(httpd.conf)有兩種方法,一種是在httpd.conf的全局下直接利用RewriteEngine on來打開rewrite功能;另一種是在局部里利用RewriteEngine on來打開rewrite功能,下面將會(huì)舉例說明,需要注意的是,必須在每個(gè)virtualhost里用RewriteEngine on來打開rewrite功能。否則virtualhost里沒有RewriteEngine on它里面的規(guī)則也不會(huì)生效。
基于目錄級(jí)的(.htaccess),要注意一點(diǎn)那就是必須打開此目錄的FollowSymLinks屬性且在.htaccess里要聲明RewriteEngine on。
2、舉例說明:
例一.下面是在一個(gè)虛擬主機(jī)里定義的規(guī)則。功能是把client請(qǐng)求的主機(jī)前綴不是www.iis7.com和70.40.213.183都跳轉(zhuǎn)到主機(jī)前綴為//www.iis7.com,避免相同內(nèi)容的網(wǎng)頁有多個(gè)指向的域名,如http://jb51.net。
復(fù)制代碼 代碼如下:
NameVirtualHost 70.40.213.183:80
ServerAdmin slj@jb51.net
DocumentRoot “/web”
ServerName jb51.net
RewriteEngine on #打開rewirte功能
RewriteCond %{HTTP_HOST} !^www.iis7.com [NC] #聲明Client請(qǐng)求的主機(jī)中前綴不是www.iis7.com,其中 [NC] 的意思是忽略大小寫
RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC] #聲明Client請(qǐng)求的主機(jī)中前綴不是70.40.213.183,其中 [NC] 的意思是忽略大小寫
RewriteCond %{HTTP_HOST} !^$ #聲明Client請(qǐng)求的主機(jī)中前綴不為空
RewriteRule ^(.*) //www.iis7.com/ [L] #含義是如果Client請(qǐng)求的主機(jī)中的前綴符合上述條件,則直接進(jìn)行跳轉(zhuǎn)到//www.iis7.com/,[L]意味著立即停止重寫操作,并不再應(yīng)用其他重寫規(guī)則。這里的.*是指匹配所有URL中不包含換行字符,()括號(hào)的功能是把所有的字符做一個(gè)標(biāo)記,以便于后面的應(yīng)用.就是引用前面里的 (.*)字符。
例二.將輸入 en.jb51.net 的域名時(shí)跳轉(zhuǎn)到www.iis7.com
復(fù)制代碼 代碼如下:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^en.jb51.net [NC]
RewriteRule ^(.*) //www.iis7.com/ [L]
例三.賽卡軟件近期更換了域名,新域名為www.iis7.com, 更加簡(jiǎn)短好記。這時(shí)需要將原來的域名ss.jb51.net, 以及論壇所在地址ss.jb51.net/bbs/定向到新的域名,以便用戶可以找到,并且使原來的論壇 URL 繼續(xù)有效而不出現(xiàn) 404 未找到,比如原來的http://ss.jb51.net/bbs/tread-60.html, 讓它在新的域名下繼續(xù)有效,點(diǎn)擊后轉(zhuǎn)發(fā)到http://bbs.jb51.net/tread-60.html,而其他網(wǎng)頁,如原先的http: //ss.jb51.net/purchase不會(huì)到二級(jí)域名bbs.jb51.net/purchase上,而是到 www.iis7.com/purchase
按照這樣的要求重定向規(guī)則應(yīng)該這樣寫:
復(fù)制代碼 代碼如下:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/bbs/
RewriteRule ^bbs/(.*) http://bbs.jb51.net/$1 [R=permanent,L]
RewriteCond %{REQUEST_URI} !^/bbs/
RewriteRule ^(.*) //www.iis7.com/$1 [R=permanent,L]
3.Apache mod_rewrite規(guī)則重寫的標(biāo)志一覽
復(fù)制代碼 代碼如下:
1) R[=code](force redirect) 強(qiáng)制外部重定向
強(qiáng)制在替代字符串加上http://thishost[:thisport]/前綴重定向到外部的URL.如果code不指定,將用缺省的302 HTTP狀態(tài)碼。