nginx之rewrite规则未加引号导致检查nginx语法报错

在nginx的站点配置文件中使用了rewrite,检查rewrite规则确定是没问题,但是在rewrite中带有"{}"时,此时检查nginx语法报错
rewrite规则:

[[email protected] ~]# grep rewrite /usr/local/nginx/conf/vhost/img.test.conf
   rewrite ^/.{4}[0-9]{4}[0-9]{8}/(.*)$ /uploads/picture/$1 last;

检查语法报错:

[[email protected] ~]# /usr/local/nginx/sbin/nginx -t
nginx: [emerg] directive "rewrite" is not terminated by ";" in /usr/local/nginx/conf/vhost/img.test.conf:8
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

错误原因:这是由于规则里有大括号“{ }”的符号,Nginx误以为这是规则的结尾,产生错误
解决的办法:把规则段使用单引号或者是双引号引起来

[[email protected] ~]# grep rewrite /usr/local/nginx/conf/vhost/img.test.conf
   rewrite ‘^/.{4}[0-9]{4}[0-9]{8}/(.*)$‘ /uploads/picture/$1 last;

或者:

[[email protected] ~]# grep rewrite /usr/local/nginx/conf/vhost/img.test.conf
   rewrite "^/.{4}[0-9]{4}[0-9]{8}/(.*)$" /uploads/picture/$1 last;
[[email protected] ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

此规则简单说明:

.{4}指的是任意4个字符,[0-9]{4}任意4个数字,[0-9]{8}任意8个数字

应用环境说明:
此服务器充当图片服务器,由nginx来提供服务,应用配置环境如下:

[[email protected] ~]# grep root /usr/local/nginx/conf/vhost/img.test.conf
   root  /data/www/images;
[[email protected] ~]# ll /data/www/images/uploads/picture/2016/07/28/1469696883.jpeg
-rw-r--r--. 1 root root 65824 Jul 28  2016 /data/www/images/uploads/picture/2016/07/28/1469696883.jpeg
[[email protected] ~]# ll /data/www/images/uploads/picture/2016/07/28/1520924032.png
-rw-r--r--. 1 root root 89032 Mar 13 14:53 /data/www/images/uploads/picture/2016/07/28/1520924032.png
[[email protected] ~]# 

浏览器请求图片,此时图片正常显示:


http://img.test.com/MTEy114512345678/2016/07/28/1469696883.jpeg
http://img.test.com/MTEy114512345678/2016/07/28/1520924032.png 

原文地址:http://blog.51cto.com/wujianwei/2158306

时间: 2024-10-10 05:03:24

nginx之rewrite规则未加引号导致检查nginx语法报错的相关文章

Nginx的Rewrite规则与实例

通过Rewrite规则可以实现规范的URL.根据变量来做URL转向及选择配置,用好Rewrite有时起到事半功倍的效果. 语法 Nginx的Rewrite相比Apache的要好理解很多,主要使用指令有if.rewrite.set.return.break等,其中rewrite是最关键的指令. rewrite 语法: rewrite regex replacement [flag]; 默认值: — 上下文: server, location, if 如果指定的正则表达式能匹配URI,此URI将被r

Nginx 之 Rewrite 规则

write 规则介绍 Rewite 规则作用 Rewrite规则可以实现对url的重写,以及重定向 作用场景: URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等 SEO优化 维护:后台维护.流量转发等 安全 注:nginx官方文档:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html 配置语法: Syntax: rewrite regex replacement [flag]; Default:—— Context:

Nginx中Rewrite规则

对rewrite来说,正则匹配不会包括hostname以及query string: 这样实现的规则其实就类似于: rewrite ^/index/([\d+])/(.*).html$ /index.php?atype=$2&user=$1 last

apache与nginx的rewrite规则问题。

尽管apache与nginx的rewirte模块都声明基于perl正则,但实际使用中还是有所不同,特别是nginx. 在apache中,在server全局配置的httpd.conf文件中使用全局变量%{-}判断并不稳妥,当我使用 %{REQUEST_FILENAME}判断请求是否为文件时就出错了.无论请求是否匹配文件,它都返回否.究其原因在手册中都有提示: If used in per-server context (i.e., before the request is mapped to t

Nginx笔记之Rewrite规则

Nginx中Rewrite规则主要用于实现URL的重写.通过Rewrite规则,可以实现规范的URL.根据变量来做URL转向及选择配置. Rewrite规则相关命令 break if return rewrite set break命令 break的作用即完成当前规则集,后续不再处理rewrite命令. if ($slow) { limit_rate 10k; break; } if命令 if条件判断,判断一个条件是否符合,符合就执行代码段内的命令.Nginx内的if命令不支持嵌套,也不支持多一

nginx之线上CDN的rewrite规则修改

线上的CDN厂商的nginx的rewrite规则配置验证 验证测试:为使nginx vhost虚拟主机配置文件更简洁,所以采用include方式,把nginx的rewrite规则写到一个单独的配置文件中 [[email protected] vhost]# grep include /usr/local/nginx/conf/vhost/img.test.conf include /data/www/images/.htaccess; 下面的rewrite规则是云端CDN的提供的配置规则,但是其

实例讲解Nginx下的rewrite规则 来源:Linux社区

一.正则表达式匹配,其中:* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配二.文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* -d和!-d用来判断是否存在目录* -e和!-e用来判断是否存在文件或目录* -x和!-x用来判断文件是否可执行三.rewrite指令的最后一项参数为flag标记,flag标记有:1.last    相当于apache里面的[L]标记,表示rewrite.2.break本条规则匹配完成后,终止匹配

nginx+tomcat集群配置(4)--rewrite规则和多应用根目录设定思路

前言: nginx中有一块很重要的概念, 就是rewrite规则. 它会对URL进行修改, 然后进行内部的重定向. rewrite授予了nginx更多的自由, 使得后级服务的接入更加地方便. 本文将简单讲述nginx的rewrite规则和原理, 同时讲解下如何借助rewrite实现单tomcat实例/多Web App服务 对应的多域名根目录访问. 案列目标: 首先来谈一下之前对于多Web App服务对应多域名根目录访问的方案. 注: 一个域名对应一个tomcat实例, 一个tomcat实例只包含

Nginx Rewrite规则初探(转)

Nginx  rewrite(nginx url地址重写)Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库. 通过Rewrite规则,可以实现规范的URL.根据变量来做URL转向及选择配置. if        指令规则语法: [plain] view plain copy if ($http_user_agent ~MSIE){