1. 程式人生 > >Apache 域名跳轉配置

Apache 域名跳轉配置

open none pro gpo inter val handler cli proxy

域名跳轉

  就是實現URL的跳轉和隱藏真實地址,基於Perl語言的正則表達式規範。平時幫助我們實現擬靜態,擬目錄,域名跳轉,防止盜鏈等 。 參數格式
參數:

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

     16) OR 代表或者

註:如果規則匹配則正常處理,8)以後的標誌無效,如果不匹配,那麽下面所有關聯的規則都跳過。
格式:

# 調用mod_rewrite.c模塊
 <IfModule mod_rewrite.c>

    # 打開rewirte功能
    RewriteEngine on 

    # 聲明Client請求的主機中前綴不是www.client.cn
    RewriteCond %(HTTP_HOST) ^www.client.com$

    # 含義是如果Client請求的主機中的前綴符合上述條件,則直接跳轉。
    AuthType Basic ^(.*)$ http://www.server.com/$1 [R=301,L]

</IfModule>

實例配置

1、查找是否有rewrite模塊,域名跳轉模塊
命令:apache2/bin/apachectl -M | grep rewrit

rewrite_module    (shared)


如果不存在:

# 編輯主配置文件,解註釋
vim httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so

註:如果沒有該模塊,則需要通過apxs工具安裝模塊。

2、修改虛擬主機配置文件

技術分享圖片
vim httpd-vhosts.conf

# 1對1域名跳轉
<VirtualHost *:80>
    DocumentRoot 
"/usr/local/html" ServerName www.server.com ServerAlias www.aaa.com <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^www.aaa.com$ RewriteRule ^/(.*)$ http://www.server.com/$1 [R=301,L] </IfModule> <Directory /usr/local/html> require all granted </Directory> </VirtualHost> # 1對多域名跳轉 <VirtualHost *:80> DocumentRoot "/usr/local/html" ServerName www.server.com ServerAlias www.aaa.com ServerAlias www.bbb.com <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR] RewriteCond %{HTTP_HOST} ^www.bbb.com$ RewriteRule ^/(.*)$ http://www.server.com/$1 [R=301,L] </IfModule> <Directory /usr/local/html> require all granted </Directory> </VirtualHost>
配置文件
註:跳轉狀態碼
    301代表永久重定向
    302臨時重定向

註:$1代表地址後跟的網絡文件。

註:訪問一個“/”可以輸入以下格式。
 RewriteCond %(HTTP_HOST)  456.com
 RewriteRule /(.*)$ HTTP://123.com/$1 [R=301,L] 

3、重新讀取配置文件

apache2/bin/apachectl graceful

Apache 域名跳轉配置