首页 > 系统相关 >Nginx Rewrite 对 “空” 和 “杠” 的处理

Nginx Rewrite 对 “空” 和 “杠” 的处理

时间:2024-01-05 19:32:26浏览次数:29  
标签:www abc Rewrite 处理 com Nginx html location odd

/usr/share/nginx/html 目录下有个一 index.html 文件。

1、常规需求

配置 http://www.abc.com/html/xxx 的请求全部在/usr/share/nginx/html目录下寻找资源

server {
    listen 80;
    server_name www.abc.com;
    location /html {
        root /usr/share/nginx;
    }
}

这时访问:

http://www.abc.com/html/index.html

http://www.abc.com/html/

http://www.abc.com/html

三者都能获取到 index.html 资源

2、奇怪的需求

配置 http://www.abc.com/odd/xxx 的请求全部在/usr/share/nginx/html目录下寻找资源。

(去掉/odd后剩余路径作为文件路径去匹配)

去掉路径中的一截儿,显然可以用rewrite 指令处理。

server {
    listen 80;
    server_name www.abc.com;
    location /odd {
        rewrite ^/odd(.*)$ $1 bread;
        root /usr/share/nginx/html;
    }
}

这时访问:

http://www.abc.com/odd/index.html 页面正常返回

http://www.abc.com/odd/ 404 Not Found

http://www.abc.com/odd 500 Internal Server Error

由此可见rewrite正则替换时

  • 替换项($1)为空会导致服务异常(500)。
  • 替换后的 / 则不在具备自动匹配欢迎页(index.html)的功能。用 / 在 /usr/share/nginx/html 文件夹中寻找,没有资源匹配就404了。

如何解决:

server {
    listen 80;
    server_name www.abc.com;
    location /odd {
        rewrite ^/odd/?$ /odd/index.html last;
        rewrite ^/odd(.*) $1 break;
        root /usr/share/nginx/html;
    }   
}

last 关键字通常用于执行重写后,将新的 URI 传递到下一个处理阶段,允许在一个新的 location 中重新匹配 URI。

break 通常用于在当前 location 块内结束重写操作,不再进行进一步的重写规则。

当然也可以通过多配几个 location 或者使用反向代理解决。

再看一种写法

server {
    listen 80;
    server_name www.abc.com;
    location /odd {
        rewrite ^/odd(.*) $1 break;
        root /usr/share/nginx/html;
    }   
    
    location / {
        root /usr/share/nginx/html;
    }
}

这时访问:

http://www.abc.com/odd/index.html 页面正常返回

http://www.abc.com/odd/ 页面正常返回

http://www.abc.com/odd 500 Internal Server Error

这样发现/odd/ 正常了,说明/odd/ 替换为/ 已经完成。之后在/usr/share/nginx/html没有找到可用资源,location /odd 这个location就匹配失败了。而后再去匹配优先级location /模块匹配,而后由于自动匹配到了欢迎页(index.html)。


标签:www,abc,Rewrite,处理,com,Nginx,html,location,odd
From: https://blog.51cto.com/sysh/9117122

相关文章

  • CSIG青年科学家会议圆满举行,合合信息打造智能文档处理融合研究新范式
       近期,第十九届中国图象图形学学会青年科学家会议(简称“会议”)在广州召开。会议由中国图象图形学学会(CSIG)主办,琶洲实验室、华南理工大学、中山大学、中国图象图形学学会青年工作委员会承办。会议面向国际学术前沿与国家战略需求,致力于支持图象图形领域的......
  • Nginx转发解析长域名多路径域名
    ​Nginx解析短域名,例如:访问http://192.168.1.23可直接跳转到http://192.168.1.23/webroot/decisionserver{listen90;server_namelocalhost;#匹配/转到/webroot/decision上;#^(.*)$表示/后任意部分,除非和其他location匹配否则一律转向/webroot/dec......
  • ReactNative 常见问题及处理办法(加固混淆)
    ReactNative常见问题及处理办法(加固混淆)文章目录摘要引言正文ScrollView内无法滑动RN热更新中的文件引用问题RN中获取高度的技巧RN强制横屏UI适配问题低版本RN(0.63以下)适配iOS14图片无法显示问题RN清理缓存RNnavigation参数取值podinstall或者npminstall443问题处......
  • 无涯教程-Redis - 事务处理命令
    Redis事务允许在单个步骤中执行一组命令,以下是事务的两个属性。事务中的所有命令都作为单个隔离操作顺序执行。Redis事务也是原子的,原子表示所有命令或不被处理。Redis事务由命令MULTI启动,然后您需要传递应在事务中执行的命令列表,此后,整个事务由EXEC命令执行。redis......
  • MySQL8.0 PG数据库 SQLServer Oracle数据库 数据库忘记密码 处理方法
    MySQL8.0分为rpm方式和tar.gz安装方式不同而不同需要修改/etc/my.conf配置文件.注意如果是rpm包的话就在这个路径下面修改增加内容skip-grant-tables注意修改完需要重启数据库rpm包安装的方式重启方法为:systemctlrestartmysqld然后可以无密码登录数据mysql-uro......
  • 一次远程桌面连接不上的问题处理
    一台WIN2016,从客户端死活用mstsc远程连接这台WIN2016报错,报的是内部错误小弟去了几次也没解决,网上各种办法都试了,就是不行,我过去最终重置了winsoc才可以,一条命令解决了问题如下图 这个命令的解释如下,还挺有用的,分享出来,知其然还得知其所以然scwinsocreset命令是Windows系......
  • 在Go语言中处理HTTP请求中的Cookie
    在Web开发中,Cookie是一种常用的技术,用于在客户端存储数据,并在随后的请求中发送回服务器。Go语言的标准库提供了强大的支持来处理HTTP请求中的Cookie。首先,让我们了解如何在Go语言中设置Cookie。以下是一个简单的示例,演示如何在HTTP响应中设置一个名为sessionID的Cookie:go复制代码pa......
  • Go语言中的HTTP头信息处理
    在Web开发中,HTTP头信息扮演着至关重要的角色。它们提供了关于HTTP请求和响应的元数据,如内容类型、缓存控制、认证信息等。Go语言,作为一种高效且强大的编程语言,提供了丰富的标准库来处理HTTP头信息。首先,我们需要了解HTTP头信息的基本结构。在Go的net/http包中,HTTP请求和响应都包含......
  • Redis键值设计与BigKey处理方案
    1.优雅的key结构Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定:遵循基本格式:[业务名称]:[数据名]:[数据/数据id]长度不超过44字节不包含特殊字符例如:我们的登录业务,保存用户信息,其key可以设计成如下格式:优点:可读性强避免key冲突方便管理更节省内存:key是string类型,底......
  • 大数据处理:高性能计算在数据挑战中的应用
    1.背景介绍大数据处理是指利用计算机科学和应用技术来处理和分析大规模、高速、多源、不确定性和复杂性高的数据集。大数据处理的核心挑战是如何在有限的时间和资源内,高效地处理和分析这些复杂的数据。高性能计算(HighPerformanceComputing,HPC)是一种计算机科学技术,旨在解决那些......