一个规则正则表达式的 nginx 多个位置

Posted

技术标签:

【中文标题】一个规则正则表达式的 nginx 多个位置【英文标题】:nginx multiple locations for one rule regex 【发布时间】:2012-03-23 23:40:21 【问题描述】:

我正在尝试强制 nginx 通过 php-fpm 以下网址进行处理:

任何以

结尾的网址 .php /sitemap.xml /api/api.js

我正在尝试以下正则表达式,但它不起作用:

location ^~ ^((.*\.php)|/sitemap.xml)+$ 

【问题讨论】:

【参考方案1】:

试试...

location ~ (\.php|sitemap\.xml|api/api\.js)$ 
    ...

【讨论】:

【参考方案2】:

你不应该真的试图强迫 Nginx 向 PHP 发送东西。这是一种“错误的方式”。您应该让 Nginx 查看文件是否存在,如果不存在则通过。据了解,*.php需要经过PHP处理,所以传递.php。

location / 
    try_files $uri /index.php;


location ~ \.php 
    fastcgi_pass unix:/tmp/php-fpm.socket;


location = /api/api.js 
    fastcgi_pass unix:/tmp/php-fpm.socket;


location = /sitemap.xml 
    fastcgi_pass unix:/tmp/php-fpm.socket;

当您不了解 Nginx 位置块的工作原理时,尝试为位置维护正则表达式从长远来看会非常痛苦。

http://wiki.nginx.org/HttpCoreModule#location

【讨论】:

以上是关于一个规则正则表达式的 nginx 多个位置的主要内容,如果未能解决你的问题,请参考以下文章

Nginx中的正则如何匹配数字

如何在该位置使用 Nginx 正则表达式

nginx-location正则表达式匹配规则及动静分离

正则表达式匹配规则

正则表达式

Nginx正则表达式location匹配Rewrite重写详解