nginx rewrite语法检测

nginx语法检测特别严格,if和后面括号以及变量等号这些元素都要有空格。

如果按照如下写法:

        location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
            root /opt/deploy-web/spaces-videos-seo-web;
            if(-f $request_filename) {
                expires 15d;
                break;
            }
        }

会报错如下:

unknown directive "if(-f" in /usr/local/server/nginx//conf/nginx.conf:77


正确的写法应该是:

if   (  -f $request_filename  )  {

.........

}

### Nginx Rewrite 模块语法说明 Nginx 的 `ngx_http_rewrite_module` 模块提供了在请求处理期间修改 URI 和重定向客户端的功能。此模块依赖于 PCRE 库支持正则表达式。 #### 基本指令 - **break**: 如果在一个location中使用了多个rewrite指令,则可以在某个条件满足后停止后续的rewrite操作[^1]。 - **last**: 中断当前的处理流程并重新搜索与新的URL匹配的位置。 - **redirect**: 返回临时重定向响应给客户端,状态码为302。 - **permanent**: 返回永久重定向响应给客户端,状态码为301。 - **if**: 对指定条件求值,在真时改变URI或返回错误代码。该指令可以用于检查变量的内容,并基于这些内容执行不同的动作[^2]。 #### 实际应用案例 对于特定 IP 地址范围内的访问控制可以通过设置条件语句来实现: ```nginx server { ... # 定义一个标记变量,默认情况下设为true表示需要重写 set $rewrite true; # 当远程地址等于公司内网IP时,将标记置为false,即不需要重写了 if ($remote_addr = "14.0.0.88") { set $rewrite false; } # 若标记仍为true,则意味着是非内部网络访问者,此时进行页面重定向至error.html if ($rewrite = true) { rewrite ^/(.*)$ /error.html break; } } ``` 上述配置会使得来自非指定 IP (`14.0.0.88`) 的所有请求都被导向 `/error.html` 页面[^4]。 另外还可以创建自定义路径映射关系,比如根据年份构建不同层次结构下的HTML文件夹和文件: ```bash mkdir -p /usr/share/nginx/html/2017/a/b/c/ echo "<html><body>Hello from 2017!</body></html>" > /usr/share/nginx/html/2017/a/b/c/index.html ``` 对应的 nginx 配置可能看起来像这样: ```nginx location ~* "^/archive/(?<year>\d{4})/(?<path>.*)$" { alias /usr/share/nginx/html/$year/$path/; } ``` 这段配置将会把形如 `/archive/2017/a/b/c/` 这样的 URL 映射到实际存在的物理位置 `/usr/share/nginx/html/2017/a/b/c/` 下面去[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值