【问题标题】:nginx location block disables rendering of php filesnginx 位置块禁用 php 文件的呈现
【发布时间】:2020-03-22 00:00:37
【问题描述】:

我的 website.conf 中有这个 location 块:

 location ~ ^/([^/?&:'"]+)$ {
        try_files $uri @root_path;
    }

这部分文件阻碍了php文件的执行,它总是将它们作为下载。

  • 如何从这个正则表达式中排除 *.php 文件?
  • 那个正则表达式是什么意思?
  • 在这种情况下排除 *.php 文件是不是更好的方式?

如果有人能详细说明,我将不胜感激。

更多上下文:我正在尝试 jitsi-meet,我想为网站添加一些基于 php 的功能。

【问题讨论】:

  • 正则表达式location块按顺序求值。您需要确保将location ~ \.php$ 块(或类似块)放置在此新块的上方
  • 成功了——谢谢。你想添加这个作为可能的答案(即使没有明确回答我的问题)?

标签: regex nginx nginx-location


【解决方案1】:

正则表达式^/([^/?&:'"]+)$ 匹配以/ 开头并包含除/?&:'" 之外的任何字符。

第一个字符很重要,因为这意味着它只会匹配包含单个路径元素的 URI(例如 /foo/index.php),但不会匹配包含另一个 / 的 URI(例如 /foo/、@ 987654334@ 和 /foo/index.php)。

其他字符可能是一个错误,因为 location 语句不太可能遇到 ?&,因为 Nginx 使用已删除查询字符串的 normalised URI


您不需要从这个正则表达式中排除.php

.php 结尾的URI 通常由另一个正则表达式位置块处理(例如location ~ \.php$)。

按顺序评估正则表达式位置块,直到找到匹配项,因此您需要确保将 location ~ \.php$ 块放置在您问题中的正则表达式位置块的上方

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2017-06-16
    • 2020-07-27
    • 1970-01-01
    相关资源
    最近更新 更多