`

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规则与实例:深入解析与应用 在现代Web服务器管理与运维领域,Nginx因其高效、稳定以及丰富的功能而备受推崇。其中,Rewrite模块是Nginx的一项重要特性,它允许管理员对HTTP请求进行重写、重定向...

    实例讲解nginx的rewrite规则

    ### 实例讲解Nginx的...通过上述实例和解释,我们可以看到Nginx中的`rewrite`规则是非常强大且灵活的,它不仅可以用于简单的URL重写,还可以根据不同的条件进行复杂的逻辑处理,从而实现更加高效和安全的服务配置。

    Nginx URL重写rewrite机制原理及使用实例

    Nginx URL重写(rewrite)介绍 和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会...

    nginx rewrite规则

    Nginx rewrite规则基础** Nginx `rewrite`规则的基本格式如下: ```nginx rewrite &lt;regex&gt; &lt;replacement&gt; [flag]; ``` - `&lt;regex&gt;`:正则表达式,匹配需要重写的URL。 - `&lt;replacement&gt;`:替换后的URL,可以是...

    nginx之rewrite

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

    Laravel的Nginx重写规则实例代码

    本文将详细解析Laravel在Nginx下的重写规则实例代码。 首先,让我们看看一个基础的Laravel Nginx配置段: ```nginx location / { index index.html index.htm index.php; try_files $uri $uri/ /index.php?$...

    nginx基础实例培训视频.zip

    09-nginx Rewrite语法详解 10-编译PHP并与nginx整合 11-安装ecshop 12-商城url重写实战 13-nginx gzip压缩提升网站速度 14-expires缓存提升网站负载 15-反向代理实现nginx+apache动静分离 16-nginx实现负载均衡 17-...

    Nginx学习丛书 Nginx应用与提高

    本章详细解析了Nginx的Rewrite规则语法,通过实例教授如何编写高效、灵活的重写规则,实现URL美化和动态请求处理。 5. **第11章 Nginx的非典型应用实例**: Nginx不仅限于Web服务,它还可以用于其他用途,如静态...

    UrlWriter实现url重写的一个实例

    9. **跨平台支持**:虽然这里提到的UrlWriter可能与特定环境有关,但URL重写技术在其他服务器平台如Apache(mod_rewrite)或Nginx也有相应的实现。 10. **性能考虑**:尽管URL重写能带来诸多好处,但过度的重写可能...

    nginx基础和优化配置.rar

    Nginx支持基于正则表达式的URL重写规则,通过`rewrite`指令实现。这有助于URL美化,SEO优化,以及对旧URL的迁移支持。合理使用rewrite,可以改善用户体验,提高搜索引擎排名。 **5. Nginx的非典型应用实例** 除了...

    Nginx服务器下使用rewrite重写url以实现伪静态的示例

    Nginx的rewrite模块可以用来重写URL,从而实现伪静态功能,这对于搜索引擎优化(SEO)非常有益。下面我们将详细介绍Nginx中使用rewrite模块重写URL的示例,以及如何为Discuz!和WordPress这样的PHP程序实现伪静态。 ...

    Nginx Rewrite规则与使用介绍和技巧实例

    Nginx的rewrite规则编写实例展示了在不同情况下如何应用rewrite规则来满足特定的业务需求: 1. 当访问的文件或目录不存在时,可以重定向到指定的PHP文件,以避免返回404错误页面。 2. 通过正则表达式可以对请求的...

    实战Nginx Nginx教程

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

    Nginx教学_nginx_sleptlyb_

    第7章介绍了 Nginx 的 URL 重写功能,基于 rewrite 模块,我们可以实现动态 URL 到静态 URL 的转换、URL 简化、路径修正等操作。这对于 SEO 优化和网站重构至关重要。通过实例,学习了如何编写和调试 rewrite 规则,...

    nginx于resin集成(nginx安装)

    - **第7章 Nginx的Rewrite规则与实例**:讲解Nginx的URL重写功能,包括正则表达式和重写规则的编写,帮助实现URL美化和路由管理。 - **第3章 Nginx的基本配置与优化**:介绍Nginx配置文件结构、主要指令以及如何进行...

Global site tag (gtag.js) - Google Analytics