Nginx實戰(二) URL重寫
Nginx實戰系列目錄
- Nginx實戰(一) 虛擬主機
- Nginx實戰(二) URL重寫
- Nginx實戰(三) 日誌配置與切割
- Nginx實戰(四) 限速功能
- Nginx實戰(五) 反向代理
- Nginx實戰(六) 引數優化
Rewrite主要的功能就是實現URL的重寫,Nginx的Rewrite規則採用PCRE Perl相容正規表示式的語法規則匹配,如果需要Nginx的Rewrite功能,在編譯Nginx之前,需要編譯安裝PCRE庫。
通過Rewrite規則,可以實現規範的URL、根據變數來做URL轉向及選擇配置。
相關指令
if指令
語法:if(condition){…}
使用環境:server,location
該指令用於檢查一個條件是否符合,如果條件符合,則執行大括號內的語句。if指令不支援巢狀,不支援多個條件&&和||處理。
其中,condition中可以包含的判斷標識如下
- ~為區分大小寫匹配
- ~*為不區分大小寫匹配
- !~區分大小寫不匹配
- !~*不區分大小寫不匹配
- -f和!-f用來判斷是否存在檔案
- -d和!-d用來判斷是否存在目錄
- -e和!-e用來判斷是否存在檔案或目錄
- -x和!-x用來判斷檔案是否可執行
例如,示例,如果是IE瀏覽器就進行跳轉
if ($http_user_agent ~MSIE){ rewrite ^(.*)$/msie/$1 break; }
return指令
語法:return code
使用環境:server,location,if
該指令用於結束規則的執行並返回狀態嗎給客戶端。狀態碼包括:204(No Content)、400(Bad Request)、402(Payment Required)、403(Forbidden)、404(Not Found)、405(Method Not Allowed)、406(Not Acceptable)、408(Request Timeout)、410(Gone)、411(Length Required)、413(Request Entity Too Large)、416(Requested Range Not Satisfiable)、500(Internal Server Error)、501(Not Implemented)、502(Bad Gateway)、503(Service Unavailable)和504(Gateway Timeout)。
例如,示例,如果訪問的URL以.sh .bash 結尾,返回狀態碼403
location ~ .*\.(sh|bash)?$ { return 403; }
set指令
語法:set variable value
使用環境:server,location,if
該指令用於定義一個變數,並給變數賦值。
rewrite指令
語法:rewrite regex replacement flag
使用環境:server,location,if
該指令根據表示式來重定向URI,或者修改字串。
flag標記有:
- last相當於Apache裡的[L]標記,表示完成rewrite
- break終止匹配, 不再匹配後面的規則
- redirect返回302臨時重定向 位址列會顯示跳轉後的地址
- permanent返回301永久重定向 位址列會顯示跳轉後的地址
例如,示例,將www重定向到http://
if ($host ~* www\.(.*)){ set $host_without_www $1; rewrite ^(.*)$ http://$host_without_www$1 permanent; }
使用案例
域名永久重定向
rewrite ^(.*)$ http://blog.720ui.com permanent;
當訪問的檔案和目錄不存在時,重定向到某個html檔案
if ( !-e $request_filename ){ rewrite ^/(.*)$ error.html last; }
訪問目錄跳轉
將訪問/b跳轉到/bbs目錄上去
rewrite ^/b/?$ /bbs permanent;
目錄對換
/123456/xxxx ====> /xxxx?id=123456 rewrite ^/(d+)/(.+)/ /$2?id=$1 last;
根據不同的瀏覽器將得到不同的結果。
if ($http_user_agent ~ Firefox) { rewrite ^(.*)$ /firefox/$1 break; } if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /msie/$1 break; } if ($http_user_agent ~ Chrome) { rewrite ^(.*)$ /chrome/$1 break; }
防止盜鏈
根據Referer資訊防止盜鏈
location ~*\.(gif|jpg|png|swf|flv)${ valid_referers none blocked www.cheng.com*.test.com; if ($invalid_referer) rewrite ^/(.*) http://www.lianggzone.com/error.html }
禁止訪問以/data開頭的檔案
location ~ ^/data { deny all; }
禁止訪問以.sh,.exe為檔案字尾名的檔案
location ~ .*\.(sh|exe)?$ { return 403; }
設定某些型別檔案的瀏覽器快取時間
location ~ .*.(gif|jpg|jpeg|png|bmp)$ { expires 30d; } location ~ .*.(js|css)$ { expires 1h; }
設定過期時間並不記錄404錯誤日誌
favicon.ico和robots.txt設定過期時間,為favicon.ico為99天,robots.txt為7天並不記錄404錯誤日誌。
location ~(favicon.ico) { log_not_found off; expires 99d; break; } location ~(robots.txt) { log_not_found off; expires 7d; break; }
設定過期時間並不記錄訪問日誌
設定某個檔案的過期時間;這裡為600秒,並不記錄訪問日誌
location ^~ /html/scripts/loadhead_1.js { access_log off; root /opt/lampp/htdocs/web; expires 600; break; }
相關文章
- Nginx實現URL重寫Nginx
- nginx url重寫Nginx
- nginx TP5 URL 重寫Nginx
- Nginx URL重寫規則配置詳解Nginx
- 使用HttpModule實現URL重寫HTTP
- ThinkPHP5.0 Linux Apache/Nginx重寫URL配置PHPLinuxApacheNginx
- PHP實現url重寫和.htaccessPHP
- 請問如何實現URL重寫?
- ASP.NET URL Rewrite. URL重寫ASP.NET
- Nginx實現url請求不區分大小寫Nginx
- Nginx 重寫URINginx
- URL 重寫新手指南
- Java UrlRewrite 實現網站URL重寫過程實錄Java網站
- Nginx支援url不區分大小寫Nginx
- 【ASP.NET Core】URL重寫ASP.NET
- IIS SSL認證流程& url重寫
- Session,Cookie,jsessionid,Url重寫SessionCookieJS
- 使用 HTTP 模組執行 URL 重寫HTTP
- Nginx 重寫規則指南Nginx
- Nginx 配置二級虛擬目錄訪問 Laravel 重寫NginxLaravel
- 實戰NginxNginx
- Laravel重寫資源路由自定義URLLaravel路由
- Nginx location匹配及Rewrite重寫Nginx
- nginx 網站目錄重寫Nginx網站
- 在struts2中實現去掉字尾及url重寫
- 如何 把下面這個url 重寫 用response 重寫到請求中...
- 應用Url重寫時CSS引用問題CSS
- IIS7 asp.net URL重寫配置ASP.NET
- .htaccess技巧: URL重寫(Rewrite)與重定向(Redirect)
- 【iis】URL重寫可以引用原地址內容
- nginx反向代理+快取開啟+url重寫+負載均衡(帶健康探測)的部署記錄Nginx快取負載
- URL重寫(rewrite)的具體實現與異常問題解決
- 實戰 nginx 調優Nginx
- nginx實現網站url帶參跳轉Nginx網站
- 利用apache的mod_rewrite做URL規則重寫Apache
- UrlReWrite(Url重寫或偽靜態)完美示例原始碼原始碼
- Zabbix實戰--監控NginxNginx
- Nginx實戰(四) 限速功能Nginx