Windows server 2008R2 IIS7.5 Rewrite偽靜態(tài)規(guī)則
使用說明:
1. 將 Rewrite 拷貝到G:\Rewrite
2. 在IIS的Isapi上添加這個篩選器, 篩選器名稱Rewrite,可執(zhí)行文件選擇 Rewrite.dll
3. 重新啟動IIS
4. httpd.ini 是配置文件,如果您了解Rewrite 規(guī)則,可以直接對其進行編輯
5. 規(guī)則適用于: DZ6.0/DZ6.1/DZ7.0/DZ7.2
圖解:
點擊左邊IIS站點
打開Isapi篩選器
增加Rewrite規(guī)則
rewrite主要的功能就是實現(xiàn)URL的重寫,Nginx的Rewrite規(guī)則采用perl兼容正則表達式的語法規(guī)則匹配
需要Nginx的Rewrite功能,在編譯Nginx之前,需要編譯安裝PCRE庫。
通過Rewrite規(guī)則,可以實現(xiàn)規(guī)范的URL、根據(jù)變量來做URL轉向及選擇配置。例如:單一入口,偽靜態(tài),URL跳轉等。
指定
指令包括: if、rewrite、set、return、break等
if指令
作用域:server,location
對給定的條件判斷。如果為真,大括號內的rewrite指令將被執(zhí)行。
if條件:
變量名,錯誤的值包括:空字符串或者以0開始的字符串; = ,!= 變量比較 ~ 區(qū)分大小寫字母匹配 ~* 不區(qū)分大小寫字母匹配 !~ 區(qū)分大小寫字母不匹配 !~* 不區(qū)分大小寫字母不匹配 -f,!-f 檢查一個文件是否存在 -d,!-d 檢查一個目錄是否存在 -e ,!-e 檢查一個文件、目錄、符號鏈接是否存在 x ,!-x 檢查一個文件是否可執(zhí)行
return
停止處理并返回指定狀態(tài)碼(code)給客戶端。
if ($host !~ "^((.*\.)?(xxx\.(com|com\.cn|cn)|\d{1,3}(\.\d{1,3}){3})(:\d+)?$") { return 403; }
rewrite
如果一個URI匹配指定的正則表達式regex,URI就按照replacement重寫。
rewrite按配置文件中出現(xiàn)的順序執(zhí)行。flags標志可以停止繼續(xù)處理。
flags標志:
last 重寫后,馬上發(fā)起一個新的請求,再次進入server塊,重試location匹配,超過10次匹配不到報500錯誤break 直接使用當前資源,不再執(zhí)行l(wèi)ocation里余下的語句,完成本次請求 redirect 返回302臨時重定向,地址欄顯示重定向后的url permant 返回301永久重定向
set指令
定義一個變量并賦值,值可以是文本,變量或者文本變量混合體。
set $varname 'hello';
uninitialized_variable_warn
開啟或關閉記錄未初始化變量的警告信息,默認開啟
Rewrite常用的全局變量
$args:變量中存放了URL中的指令。
$content_length:保存了請求報文頭部中的content-lenght字段。
$content_type:保存了請求頭部中的content-type字段。
$document_root:保存了針對當前資源的請求的系統(tǒng)根目錄。
$document_uri:保存了當前請求中不包含指令的URI,主注意是不包含請求的指令。
$host:存放了請求的服務器名稱。
$http_user_agent:客戶端瀏覽器的詳細信息。
$http_cookie:客戶端的cookie信息。
$limit_rate:如果nginx服務器使用limit_rate配置了顯示網(wǎng)絡速率,則會顯示,如果沒有設置, 則顯示0。
$remote_addr:存放了客戶端的地址,注意是客戶端的公網(wǎng)IP,也就是一家人訪問一個網(wǎng)站,則會顯示為路由器的公網(wǎng)IP。
$remote_port:客戶端請求Nginx服務器時隨機打開的端口,這是每個客戶端自己的端口。
$remote_user:已經(jīng)經(jīng)過Auth Basic Module驗證的用戶名。
$request_body_file:做反向代理時發(fā)給后端服務器的本地資源的名稱。
$request_method:請求資源的方式,GET/PUT/DELETE等。
$request_filename:當前請求的資源文件的路徑名稱,由root或alias指令與URI請求生成。
$request_uri:包含請求參數(shù)的原始URI,不包含主機名。
$squery_string:保存了URL請求的指令,與 $args相同。
$scheme:請求的協(xié)議,如ftp,https,http等。
$server_protocpl:保存了客戶端請求資源使用的協(xié)議的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等。
$server_addr:保存了服務器的IP地址。
$server_name:服務器的主機名。
$server_port:服務器的端口號。
$uri:與$document_uri相同,是一個不包含指令的uri地址。
示例:
if ($request_method = POST) { return 405; } location ~* /\.(sql|bakup|old|tpl|)$ { deny all; } if (!-f $request_filename){ break; proxy_pass http://127.0.0.1; } location ~* \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked *.xxx.com; if ($invalid_referer) { return 404; } } location = / { proxy_pass http://new.test.com/index } location / { rewrite ^/ http://www.baidu.com; } location ^~ /static/ { root /webroot/static/; } location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/static/res/; }
虛擬主機
server { listen 80; server_name www.test.com; root /usr/share/nginx/html; access_log /var/log/nginx/log/host.access.log main; error_log /var/log/nginx/log/host.error.log; location ~* ^.+\.(jpg|jpeg|gif|png|bmp|css|js|swf|txt)$ { access_log off; break; } location / { try_files $uri $uri/ /index.php?$query_string; index index.php index.html index.htm; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #fastcgi_pass unix:/var/run/php5-fpm.sock; include fastcgi_params; } location ~* /\. { deny all; } }
應該在 php.ini 文件中設置cgi.fix_pathinfo=0
, 能避免掉很多不必要的 stat() 系統(tǒng)調用。
當運行一個 HTTPS 服務器時,需要添加 fastcgi_param HTTPS on;
這樣才能正確地判斷連接是否安全。
Rewrite規(guī)則常見正則表達式
~ 為區(qū)分大小寫的匹配。 ~* 不區(qū)分大小寫的匹配(匹配firefox的正則同時匹配FireFox)。 !~ 不匹配的 !~* 不匹配的 . 匹配除換行符以外的任意字符 \w 匹配字母或數(shù)字或下劃線或漢字 \s 匹配任意的空白符 \d 匹配數(shù)字 \b 匹配單詞的開始或結束 ^ 匹配字符串的開始 $ 匹配字符串的結束 * 重復零次或更多次 + 重復一次或更多次 ? 重復零次或一次 {n} 重復n次 {n,} 重復n次或更多次 {n,m} 重復n到m次 *? 重復任意次,但盡可能少重復 +? 重復1次或更多次,但盡可能少重復 ?? 重復0次或1次,但盡可能少重復 {n,m}? 重復n到m次,但盡可能少重復 {n,}? 重復n次以上,但盡可能少重復 \W 匹配任意不是字母,數(shù)字,下劃線,漢字的字符 \S 匹配任意不是空白符的字符 \D 匹配任意非數(shù)字的字符 \B 匹配不是單詞開頭或結束的位置 [^x] 匹配除了x以外的任意字符 [^aeiou] 匹配除了aeiou這幾個字母以外的任意字符 捕獲 (exp) 匹配exp,并捕獲文本到自動命名的組里 (?<name>exp) 匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?'name'exp) (?:exp) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號 零寬斷言 (?=exp) 匹配exp前面的位置 (?<=exp) 匹配exp后面的位置 (?!exp) 匹配后面跟的不是exp的位置 (?<!exp) 匹配前面不是exp的位置 注釋 (?#comment) 這種類型的分組不對正則表達式的處理產(chǎn)生任何影響,用于提供注釋讓人閱讀
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答?。?點擊進入論壇