apache rewrite 參數和例子

apache rewrite 參數和例子

‍1.Apache mod_rewrite重寫規則的標誌

     1) R[=code](force redirect) 重定向到外部的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) 設置環境變量

2.服務器變量                                                                   

HTTP headers: connection & request:

    HTTP_USER_AGENT
    HTTP_REFERER
    HTTP_COOKIE
    HTTP_FORWARDED
    HTTP_HOST
    HTTP_PROXY_CONNECTION
    HTTP_ACCEPT
    REMOTE_ADDR
    REMOTE_HOST
    REMOTE_USER
    REMOTE_IDENT
    REQUEST_METHOD
    SCRIPT_FILENAME
    PATH_INFO
    QUERY_STRING
    AUTH_TYPE
server internals: system stuff: specials:
    DOCUMENT_ROOT
    SERVER_ADMIN
    SERVER_NAME
    SERVER_ADDR
    SERVER_PORT
    SERVER_PROTOCOL
    SERVER_SOFTWARE
    TIME_YEAR
    TIME_MON
    TIME_DAY
    TIME_HOUR
    TIME_MIN
    TIME_SEC
    TIME_WDAY
    TIME
    API_VERSION
    THE_REQUEST
    REQUEST_URI
    REQUEST_FILENAME
    IS_SUBREQ 

3.舉例說明

例一.把client請求的主機前綴不是www.owjee.com和70.40.213.183都跳轉到主機前綴爲http://www.owjee.com,避免相同內容的網頁有多個指向的域名如http://owjee.com

     NameVirtualHost 70.40.213.183:80
     ServerAdmin 
     DocumentRoot “/web”
     ServerName kiya.cn
     RewriteEngine on                              #打開rewirte功能
     RewriteCond %{HTTP_HOST} !^www.owjee.com [NC]   #聲明Client請求的主機中前綴不是www.owjee.com,其中 [NC] 的意思是忽略大小寫
     RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC] #聲明Client請求的主機中前綴不是70.40.213.183,其中 [NC] 的意思是忽略大小寫
     RewriteCond %{HTTP_HOST} !^$                  #聲明Client請求的主機中前綴不爲空
     RewriteRule ^(.*) http://www.owjee.com [L]     #含義是如果Client請求的主機中的前綴符合上述條件,則直接進行跳轉到http://www.owjee.com這裏的.*是指匹配所有URL中不包含換行字符,()括號的功能是把所有的字符做一個標記,以便於後面的應用.

例二.將輸入en.owjee.com的域名時跳轉到http://www.owjee.com

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

例三.新域名爲www.sicasoft.com,這時需要將原來的域名ss.kiya.cn, 以及論壇所在地址ss.kiya.cn/bbs/定向到新的域名,以便用戶可以找到,並且使原來的論壇URL繼續有效而不出現404未找到.

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


例四.同時達到下面兩個要求:
1.用http://www.zzz.com/xxx.php 來訪問 http://www.zzz.com/xxx/
2.用http://yyy.zzz.com 來訪問 http://www.zzz.com/user.php?username=yyy 的功能

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

例五.首先要在DNS服務器上打開域名的泛域名解析(自己做或者找域名服務商做)。比如把 *.kiya.us和 *.kiya.cn全部解析到了IP地址70.40.213.183上。Apache中關於*.kiya.us的虛擬主機的設定。

     ServerAdmin 
     DocumentRoot /home/www/www.kiya.us
     ServerName dns.kiya.us
     ServerAlias dns.kiya.us kiya.us *.kiya.us
     CustomLog /var/log/httpd/osa/access_log.log” common
     ErrorLog /var/log/httpd/osa/error_log.log”
     AllowOverride None
     Order deny,allow
     #AddDefaultCharset GB2312
     RewriteEngine on
     RewriteCond %{HTTP_HOST} ^[^.]+.kiya.(cn|us)$
     RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
     RewriteRule ^([^.]+).kiya.(cn|us)(.*)$ /home/www/www.kiya.us/sylvan$3?un=$1&%{QUERY_STRING} [L]


例六.Rewrite防盜鏈正則,不允許這兩個網站盜鏈,其它的網站都可以盜鏈的規則怎麼寫.

     RewriteEngine On
     RewriteCond %{HTTP_REFERER} chinaz.com [NC]
     RewriteCond %{HTTP_REFERER} im286.com [NC]
     RewriteRule .*\.(jpg|jpeg|gif|png|rar|zip|txt|ace|torrent|gz|swf)$ http://www.xxx.com/fuck.png [R,NC,L]

列七.兩個關於判斷USER AGENT 例子和自動添加.php擴展名及自動換.html到.php擴展名的例子:

     RewriteEngine on
     RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR]
     RewriteCond %{HTTP_USER_AGENT} ^Opera [NC]
     RewriteRule ^.* – [F,L] 這裏”-”表示沒有替換,瀏覽器爲IE和Opera的訪客將被禁止訪問。

     RewriteEngine On
     RewriteBase /test
     RewriteCond %{REQUEST_FILENAME}.php -f
     RewriteRule ([^/]+)$ /test/$1.php
     #for example: /test/admin => /test/admin.php
     RewriteRule ([^/]+)\.html$ /test/$1.php [L]
     #for example: /test/admin.html => /test/admin.php

     限制目錄只能顯示圖片
     < IfModule mod_rewrite.c>
     RewriteEngine on
     RewriteCond %{REQUEST_FILENAME} !^.*\.(gif|jpg|jpeg|png|swf)$
     RewriteRule .*$ – [F,L]
     < /IfModule>


例八.關於特定文件擴展名的重寫。

     重寫有某些擴展名的文件:
     RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]
     如果要排除一些擴展名:
     RewriteRule !\.(js|ico|gif|jpg|JPG|png|PNG|css|pdf|swf)$ index.php

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章