rewrite是nginx一個特別重要的指令,該指令可以使用正則表達式改寫URI。可以指定一個或多個rewrite指令,按順序匹配。
正則匹配規則1~ 區分大小寫匹配
2~* 不區分大小寫匹配
3!~ 和 !~* 區分大小寫不匹配及不區分大小寫不匹配
1-f和!-f 判斷是否存在文件
2-d和!-d 判斷是否存在目錄
3-e和!-e 判斷是否存在文件或目錄
4-x和!-x 判斷文件是否可執行
1set
2if
3return
4break
5rewrite
1使用範圍:server,location,if;
2中斷當前相同作用域的其他nginx配置。
1使用範圍:server,location
2檢查一個條件是否符合。If指令不支持嵌套,不支持多個條件&&和||處理。
1格式:return code ;
2使用範圍:server,location,if;
3結束規則的執行並返回狀態碼給客戶端。
1使用環境:server,location,if
2定義一個變量,並給變量賦值。變量的值可以為文本、變量或者變量的組合。
3set $var "hello world"
1rewrite regex replacement [flag]
2
3flag標誌位有四種:
4break:停止rewrite檢測,也就是說當含有break flag的rewrite語句被執行時,該語句就是rewrite的最終結果。
5last:停止rewrite檢測,但是跟break有本質的不同,last的語句不一定是最終結果。
6redirect:返回302臨時重定向,一般用於重定向到完整的URL(包含http:部分)
7permanent:返回301永久重定向,一般用於重定向到完整的URL(包含http:部分)
當訪問的文件和目錄不存在時,重定向到某個php文件
1if( !-e $request_filename )
2{
3 rewrite ^/(.*)$ index.php last;
4}
目錄對換 /123456/xxxx ====> /xxxx?id=123456
1rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;
如果客戶端使用的是IE瀏覽器,則重定向到/ie目錄下
1if( $http_user_agent ~ MSIE)
2{
3 rewrite ^(.*)$ /ie/$1 break;
4}
1
禁止訪問以/data開頭的文件
1location ~ ^/data
2{
3 deny all;
4}
禁止訪問以.sh,.flv,.mp3為文件後綴名的文件
1location ~ .*\.(sh|flv|mp3)$
2{
3 return 403;
4}
設置某些類型文件的瀏覽器緩存時間
1location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
2{
3 expires 30d;
4}
文件反盜鏈並設置過期時間
1location ~*^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$
2{
3 valid_referers none blocked *.linuxidc.com*.linuxidc.net localhost 208.97.167.194;
4 if ($invalid_referer) {
5 rewrite ^/ http://img.linuxidc.net/leech.gif;
6 return 412;
7 break;
8 }
9 access_log off;
10 root /opt/lampp/htdocs/web;
11 expires 3d;
12 break;
13}
將多級目錄下的文件轉成一個文件,增強seo效果
1/job-123-456-789.html 指向/job/123/456/789.html
2
3rewrite^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;
域名跳轉
1server
2{
3 listen 80;
4 server_name jump.linuxidc.com;
5 index index.html index.htm index.php;
6 root /opt/lampp/htdocs/www;
7 rewrite ^/ http://www.linuxidc.com/;
8 access_log off;
9}
多域名轉向
1server_name www.linuxidc.comwww.linuxidc.net;
2index index.html index.htm index.php;
3root /opt/lampp/htdocs;
4if ($host ~ "linuxidc\.net") {
5 rewrite ^(.*) http://www.linuxidc.com$1permanent;
6}
1arg_PARAMETER
2args
3binary_remote_addr
4body_bytes_sent
5content_length
6content_type
7cookie_COOKIE
8document_root
9document_uri
10host
11hostname
12http_HEADER
13is_args
14http_user_agent
15http_cookie
16limit_rate
17query_string
18request_body_file
19request_method
20remote_addr
21remote_port
22remote_user
23request_completion
24request_filename
25request_uri
26scheme
27server_protocol
28server_addr
29server_name
30server_port