php – 修改Nginx正则表达式,使其仅在某些情况下应用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 修改Nginx正则表达式,使其仅在某些情况下应用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1653字,纯文字阅读大概需要3分钟。
内容图文
我正在创建一个混合的PHP / Node.js应用程序.对于PHP,我使用的是Yii框架.在Node.js中,我使用express.
PHP正在运行Nginx.我使用proxy_pass指令将以/ node开头的任何请求汇集到在端口3000上运行的节点服务器(例如server.com/node/api代理到server.com:3000/api.)
这在大多数情况下效果很好.但是,我的Nginx配置文件中的一个指令确保不存在对不存在的静态文件的请求不会传递给Yii.相反,返回一个简单的404错误.该指令的原始版本如下所示:
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|txt)${
try_files $uri =404;
#For production servers you can set expires header with a long period
expires 3M;
}
这个指令的问题是Node.js提供了一些静态文件(特别是socket.io客户端).当浏览器请求server.com/node/socket.io/socket.io.js时,上述规则被触发,Nginx返回404.
我想要做的是修改规则,以便只有当静态文件的请求前面没有/ node /时才返回404.我尝试了各种规则组合,但似乎都没有.在查阅了perl正则表达式文档之后,这里有一个我认为可行的文档,但不是:
location ~* (?<!/node/)\.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|txt)${
try_files $uri =404;
expires 3M;
}
我认为规则的负面/后面部分(?<!/ node /)可以排除以/ node /开头的请求,但事实并非如此.相反,规则会因为真正不存在的js文件和socket.io.js(以及从Node.js提供的各种其他静态文件)而被触发.所以在这两种情况下我得到404. 我应该如何更改正则表达式,以便仅当请求不以/ node /开头时才应用规则?
解决方法:
如果我正确地阅读了您的问题,那么您谈论的是不以/ node /开头的路径.这比匹配之前没有东西的东西简单得多.这应该这样做:
location ~* ^(?!/node/).*\.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|txt)${
我认为@Pogo几乎拥有它,但据我所知,它的位置不包括服务器名称.正则表达式启动锚点^匹配.com(在这种情况下)之后和第一个斜杠之前的位置.因此,^(?!/ node /)确保您的路径不以/ node /开头.
内容总结
以上是互联网集市为您收集整理的php – 修改Nginx正则表达式,使其仅在某些情况下应用全部内容,希望文章能够帮你解决php – 修改Nginx正则表达式,使其仅在某些情况下应用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。