`

nginx 重写 rewrite 实战

阅读更多

nginx rewrite 正则表达式匹配

大小写匹配

~ 为区分大小写匹配 

~* 为不区分大小写匹配 

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 

文件及目录匹配

-f和!-f用来判断是否存在文件 

-d和!-d用来判断是否存在目录 

-e和!-e用来判断是否存在文件或目录 

-x和!-x用来判断文件是否可执行 

flag标记

last 相当于Apache里的[L]标记,表示完成rewrite

break 终止匹配, 不再匹配后面的规则。

redirect 返回302临时重定向 地址栏会显示跳转后的地址。

permanent 返回301永久重定向 地址栏会显示跳转后的地址。

 

logcation的几个使用实例:

   1)location  / { }:匹配任何查询,因为所有请求都以 / 开头。但是正则表达式规则将被优先和查询匹配。 
   2)location =/ {}:仅仅匹配/ 
   3)location ~* \.(gif|jpg|jpeg)$

     { 
        rewrite \.(gif|jpg)$ /logo.png; 
     }:location不区分大小写,匹配任何以gif,jpg,jpeg结尾的文件。

 

几个实例:

多目录转成参数 

要求:abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2 

规则配置:

if ($host ~* (.*)\.domain\.com) { 

    set $sub_name $1;

    rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1 last; 

目录对换 

要求:/123456/xxxx -> /xxxx?id=123456 

规则配置:

rewrite ^/(\d+)/(.+)/ /$2?id=$1 last; 

 

再来一个针对浏览器优化的自动rewrite,这里rewrite后的目录可以是存在的;

例如设定nginx在用户使用ie的使用重定向到/nginx-ie目录

规则如下:

 if ($http_user_agent ~ MSIE) {

     rewrite ^(.*)$ /nginx-ie/$1 break; 

目录自动加“/” ,这个功能一般浏览器自动完成

if (-d $request_filename){ 

rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; 

以下这些可能就跟广义的rewrite重写无关了

禁止htaccess 

location ~/\.ht { 

    deny all; 

禁止多个目录 

location ~ ^/(cron|templates)/ { 

    deny all; break; 

禁止以/data开头的文件,可以禁止/data/下多级目录下.log.txt等请求

location ~ ^/data { 

    deny all; 

禁止单个文件 

location ~ /data/sql/data.sql { 

    deny all; 

给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; 

    expires 600; 

    break; 

 

Nginx还可以自定义某一类型的文件的保质期时间,具体写法看下文的代码:

location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ { 
if (-f $request_filename) { 
   expires    1h; 
   break; 
  } 
  }

//上段代码就将js|css|jpg|jpeg|gif|png|swf这类文件的保质期设置为一小时。

 

防盗链的设置:

防盗链:如果你的网站是个下载网站,下载步骤应该是先经过你的主页找到下载地址,才能下载,为了防止某些网友直接访问下载地址完全不通过主页下载,我们就可以使用防盗链的方式,具体代码如下:

location ~* \.(gif|jpg|swf)$ { 
  valid_referers none blocked start.igrow.cn sta.igrow.cn; 
  if ($invalid_referer) { 
  rewrite ^/ http://$host/logo.png; 
  } 
}

 

文件反盗链并设置过期时间--<盗链多次请求也会打开你的站点的图片啊,所以设置下缓存时间,不会每次盗链都请求并下载这张图片>

location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { 

    valid_referers none blocked *.jjonline.cn *.jjonline.com.cn *.lanwei.org *.jjonline.org localhost  42.121.107.189; 

    if ($invalid_referer) { 

        rewrite ^/ http://img.jjonline.cn/forbid.gif; 

        return 417; 

        break; 

    } 

    access_log off; 

    break; 

说明:

 

这里的return 417 为自定义的http状态码,默认为403,方便通过nginx的log文件找出正确的盗链的请求地址 

“rewrite ^/ http://img.jjonline.cn/forbid.gif;”显示一张防盗链图片

 “access_log off;”不记录访问日志,减轻压力 

“expires 3d”所有文件3天的浏览器缓存 

 

 

只充许固定ip访问网站,并加上密码;这个对有权限认证的应用比较在行

location \ { 

    allow 22.27.164.25; #允许的ipd

    deny all; 

    auth_basic “KEY”; #认证的一些设置

    auth_basic_user_file htpasswd; 

}

说明:location的应用也有各种变化,这里的写法就针对了根目录了。

文件和目录不存在的时重定向

if (!-e $request_filename) { 

    #proxy_pass http://127.0.0.1; #这里是跳转到代理ip,这个代理ip上有一个监听的web服务器

    rewrite ^/ http://www.jjonline.cn/none.html;  #跳转到这个网页去

    #return 404; #直接返回404码,然后会寻找root指定的404.html文件

域名跳转 

server { 

    listen 80; 

    server_name jump.jjonline.cn ;#需要跳转的多级域名

    index index.html index.htm index.php; #入口索引文件的名字

    root /var/www/public_html/; #这个站点的根目录

    rewrite ^/ http://www.jjonline.cn/; 

    #rewrite到这个地址,功能表现:在浏览器上输入jump.jjonline.cn并回车,不会有任何提示直接变成www.jjonline.cn

    access_log off; 

多域名转向 

 

server { 

    listen 80; 

 

    server_name www.jjonline.cn www.jjonline.org;

    index index.html index.htm index.php; 

    root /var/www/public_html/; 

    if ($host ~ “jjonline\.org”) { 

        rewrite ^(.*) http://www.jjonline.cn$1 permanent; 

    } 

}

三级域名跳转 

if ($http_host ~* “^(.*)\.i\.jjonline\.cn$”) { 

    rewrite ^(.*) http://demo.jjonline.cn$1; 

    break; 

域名镜向 

server { 

    listen 80; 

    server_name mirror.jjonline.cn; 

    index index.html index.htm index.php; 

    root /var/www/public_html; 

    rewrite ^/(.*) http://www.jjonline.cn/$1 last; 

    access_log off; 

某个子目录作镜向,这里的示例是demo子目录

location ^~ /demo { 

    rewrite ^.+ http://demo.jjonline.cn/ last; 

    break; 

}

以下在附带本博客的rewrite写法,emlog系统的rewrite

 

location ~ {

    if (!-e $request_filename) {

           rewrite ^/(.+)$ /index.php last;

    }

}

分享到:
评论

相关推荐

    nginx之rewrite

    Nginx中的rewrite模块是一个非常实用的功能,它允许用户在服务器中动态地重写URL,实现URL的灵活处理,包括URL重定向和内部跳转等操作。rewrite规则在nginx的配置文件中定义,通常在server、location和if指令块中...

    Nginx高性能Web服务器实战教程+高清+完整书签

    - **URL规则**:解析Nginx的rewrite模块,学习如何制定和应用URL重写规则,优化网站URL结构。 5. **HTTPS安全配置** - **SSL/TLS**:介绍SSL/TLS协议,以及如何在Nginx中配置SSL证书,确保网站数据传输的安全性。...

    Nginx实践-商城url重写实战

    在本文中,我们将深入探讨如何使用Nginx进行URL重写,特别是在ECSHOP商城系统中的实战应用。Nginx作为一个高性能的HTTP和反向代理服务器,它强大的URL管理和重写功能对于优化网站结构、提升用户体验以及搜索引擎优化...

    实战Nginx取代Apache的高性能Web服务器_文字版

    5. URL重写:使用`rewrite`指令进行URL转换,增强网站路由功能。 三、反向代理与负载均衡 1. 反向代理:Nginx作为前端服务器,接收客户端请求并转发到后端服务器,隐藏真实服务器集群的信息。 2. 负载均衡:通过`...

    Nginx实战最全教程.zip

    此外,Nginx的强大之处在于其灵活的URL重写规则。通过`rewrite`指令,你可以根据需求修改请求的URL,实现诸如SEO优化、隐藏真实路径等功能。这在动态网站或者API服务中尤其有用。 安全方面,Nginx提供了SSL/TLS支持...

    nginx实战-张晏

    7. Rewrite规则:详细介绍Nginx的rewrite模块,学习如何编写重写规则,实现URL美化、隐藏真实路径等功能。 五、其他高级应用 8. WebSocket支持:讲解Nginx如何支持WebSocket协议,实现长连接通信。 9. 身份验证与...

    实战nginx.pdf

    6. **伪静态规则**:通过rewrite模块,Nginx可以处理以动态形式表示的静态资源请求,如将动态URL重写为友好的SEO格式。 7. **错误页面处理**:通过error_page指令,可以自定义404、500等错误页面,提升用户体验。 ...

    实战Nginx 高性能web服务器

    - 支持Rewrite重写规则:Nginx能够处理复杂的URL重写,对于搜索引擎优化(SEO)非常重要。 - 内置的健康检查功能:可以动态检测后端服务的健康状况,及时从故障服务中摘除。 - 节省带宽:Nginx支持压缩输出,可以...

    《实战nginx》电子版

    HTTP模块涉及了如rewrite(重写规则)、access(访问控制)、limit_conn(连接限制)、proxy(反向代理)等,这些模块是构建复杂Web服务的基础。Stream模块则主要用于TCP和UDP的负载均衡,对于网络服务的优化有着...

    Nginx高性能Web服务器实战教程

    此外,Nginx还支持URL重写功能,通过`rewrite`指令,可以实现URL的动态转换,对SEO优化或隐藏实际路径具有积极意义。同时,Nginx提供了丰富的过滤器模块,如gzip压缩、防盗链等,进一步提高性能和安全性。 安全方面...

    实战Nginx Nginx教程

    《第7章 Nginx的Rewrite规则与实例》讲解了Nginx的URL重写功能,这是实现SEO友好的URL和路径重定向的关键。通过学习正则表达式和重写规则,你可以实现动态URL的静态化,以及对旧URL的无缝迁移。 《第11章 Nginx的非...

    实战nginx-全

    3. **URL重写**:借助`rewrite`规则进行URL转换,实现动态路由。 4. **SSL/TLS**:配置SSL证书,启用HTTPS,保护数据传输安全。 5. **限速与限流**:使用`limit_rate`和`limit_conn`限制客户端的请求速率和连接数,...

    带完整详细目录:Nginx高性能Web服务器详解+深入理解Nginx:模块开发与架构解析(第2版)陶辉著

    - URL重写规则:通过rewrite指令实现URL的动态转换,优化SEO或实现路径映射。 - 访问控制:基于IP、用户代理、基本认证等方式限制访问权限。 6. **日志管理** - 日志格式定制:自定义Nginx的日志格式,方便进行...

    实战Nginx_取代Apache的高性能Web服务器_代码

    `rewrite`指令允许根据规则进行URL重写,这对于优化SEO和实现动态URL静态化很有帮助。 10. **日志记录** Nginx的日志格式灵活,可以自定义记录内容。默认日志文件通常为`access.log`和`error.log`,通过`log_...

    实战Nginx:取代Apache的高性能Web服务器.

    4. URL重写:Nginx支持灵活的URL重写规则,有助于实现SEO优化和复杂的路由配置。 二、Nginx的架构与工作原理 1. 单进程多线程架构:Nginx主要由主进程和工作进程组成,其中主进程负责管理和调度工作进程,工作进程...

    Nginx 应用技术指南Nginx Tips【第二版】.zip

    - **重写规则**:理解Nginx的rewrite模块,编写URL重写规则,实现URL美化和SEO优化。 5. **SSL/TLS安全** - **HTTPS配置**:配置Nginx支持HTTPS,理解和使用SSL证书,确保网站通信安全。 - **HSTS与OCSP**:了解...

    实战Nginx.取代Apache的高性能Web服务器.2010

    - **支持Rewrite重写规则**:Nginx支持URL重写,这在进行网站迁移或者调整URL结构时非常有用。 - **内置健康检查功能**:Nginx具有内置的健康检查机制,可以自动检测后端服务器的状态并作出相应的调整,提高了系统...

    [官方]Complete NGINX Cookbook

    4. **URL重写与路由**:学习使用NGINX的rewrite模块进行URL重定向和规则匹配,优化网站的SEO和用户体验。 5. **SSL/TLS安全配置**:讲解如何为网站启用HTTPS,配置证书,以及设置安全的SSL/TLS参数,保障通信安全。...

    实战 nginx

    **实战Nginx** 在IT行业中,Nginx是一个广泛使用的高性能HTTP和反向代理服务器,也常用于邮件代理服务。本实战指南将深入探讨Nginx的核心功能、配置技巧以及与Java应用的集成,帮助你更好地理解和利用这一强大的...

Global site tag (gtag.js) - Google Analytics