Nginx 访问 URL 末尾不加斜杠 / 报404错误


1-问题描述

Nginx中配置location的匹配规则时,访问URL时末尾加上斜杠/可以访问,末尾不加斜杠/就会报404错误。


2-Nginx 配置

server {
    listen 80
    server_name xxx.com
    ...
    location /yyy {
        root /zzz/aaa;
        index  index.html index.htm;
    }
    ...
}
  • 访问http://xxx.com/yyy/:会匹配到服务器的/zzz/aaa/yyy文件夹下index.htmlindex.htm
  • 访问http://xxx.com/yyy:会匹配失败报404错误。

3-解决方法

3.1-解决思路

  • 既然加斜杠/可以匹配,那么可以对不加斜杠/URL进行重写,末尾加上斜杠,然后重定向。
  • 使用Nginxngx_http_rewrite_module。首先判断请求资源是否为目录类型if ( -d $request_filename ),然后利用正则匹配替换,并用rewritepermanent来重定向301``(rewrite ^/(.*)([^/])$ $scheme://$host/$1$2/ permanent;

3.2-修改 nginx.conf

server {
    listen 80
    server_name xxx.com
    ...
    location /yyy {
        root /zzz/aaa;
        if (-d $request_filename){
            rewrite ^/(.*)([^/])$ $scheme://$host/$1$2/ permanent;
        }
        index index.html index.htm;
    }
    ...
}

3.3-验证 nginx.conf

./sbin/nginx -t

在这里插入图片描述

3.4-重启 Nginx

./sbin/nginx -s reload

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页