Apache Rewrite實現URL的301跳轉和域名跳轉
2024-08-27 18:27:59
供稿:網友
如果要想用到rewrite模塊,必須先安裝或加載rewrite模塊。方法有兩種一種是編譯apache的時候就直接安裝rewrite模塊,別一種是編譯apache時以DSO模式安裝apache,然后再利用源碼和apxs來安裝rewrite模塊。
基于服務器級的(httpd.conf)有兩種方法,一種是在httpd.conf的全局下直接利用RewriteEngine on來打開rewrite功能;另一種是在局部里利用RewriteEngine on來打開rewrite功能,下面將會舉例說明,需要注意的是,必須在每個virtualhost里用RewriteEngine on來打開rewrite功能。否則virtualhost里沒有RewriteEngine on它里面的規則也不會生效。
基于目錄級的(.htaccess),要注意一點那就是必須打開此目錄的FollowSymLinks屬性且在.htaccess里要聲明RewriteEngine on。
2、舉例說明:
例一.下面是在一個虛擬主機里定義的規則。功能是把client請求的主機前綴不是www.49028c.com和70.40.213.183都跳轉到主機前綴為//www.49028c.com,避免相同內容的網頁有多個指向的域名,如http://Vevb.com。
代碼如下:
NameVirtualHost 70.40.213.183:80
ServerAdmin slj@Vevb.com
DocumentRoot “/web”
ServerName Vevb.com
RewriteEngine on #打開rewirte功能
RewriteCond %{HTTP_HOST} !^www.49028c.com [NC] #聲明Client請求的主機中前綴不是www.49028c.com,其中 [NC] 的意思是忽略大小寫
RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC] #聲明Client請求的主機中前綴不是70.40.213.183,其中 [NC] 的意思是忽略大小寫
RewriteCond %{HTTP_HOST} !^$ #聲明Client請求的主機中前綴不為空
RewriteRule ^(.*) //www.49028c.com/ [L] #含義是如果Client請求的主機中的前綴符合上述條件,則直接進行跳轉到//www.49028c.com/,[L]意味著立即停止重寫操作,并不再應用其他重寫規則。這里的.*是指匹配所有URL中不包含換行字符,()括號的功能是把所有的字符做一個標記,以便于后面的應用.就是引用前面里的 (.*)字符。
例二.將輸入 en.Vevb.com 的域名時跳轉到www.49028c.com
代碼如下:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^en.Vevb.com [NC]
RewriteRule ^(.*) //www.49028c.com/ [L]
例三.賽卡軟件近期更換了域名,新域名為www.49028c.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.49028c.com/purchase
按照這樣的要求重定向規則應該這樣寫:
代碼如下:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/bbs/
RewriteRule ^bbs/(.*) http://bbs.Vevb.com/$1 [R=permanent,L]
RewriteCond %{REQUEST_URI} !^/bbs/