让没有扩展名的文件通过 nginx 上的 PHP 解析器

让没有扩展名的文件通过 nginx 上的 PHP 解析器

由于遗留原因,我需要在 nginx 上实现以下场景,但我似乎遇到了麻烦。假设我在文档根目录中有一个名为“info”的文件,没有任何文件扩展名。现在这是一个 PHP 文件,但它没有扩展名,并且无法重命名,原因我不会在这里解释。我该如何编写 nginx 配置以使此文件被 PHP 解析。

我实际上已尝试将此文件重命名为 info.php,然后将以下内容添加到我的 nginx 配置中,然后我尝试点击以http://{siteurl}/info期望它在内部重写为info.php,但它所做的只是失败了index.html

location / {
        try_files @extensionless-php $uri $uri/ /index.html;
}

location @extensionless-php {
        rewrite ^(.*)$ $1.php last;
}

现在我对 nginx 还很陌生,所以我认为我只是缺少一些非常基本的东西。以前在 apache 中,配置是这样的,以使这种情况正常工作...

    <LocationMatch "^/(info|...a few other files...)/?.*$">
            ForceType application/x-httpd-php
    </LocationMatch>

任何帮助深表感谢。

答案1

试试这个。请注意,我try_files对您的示例进行了轻微的调整。我还添加了root应该与您的 Web 根路径相匹配的内容。

location / {
    root /your/web/root/path
    try_files $uri $uri/ @extensionless-php;
    index index.php index.html;
}

location @extensionless-php {
    rewrite ^(.*)$ $1.php last;
}

答案2

终于明白了:

location /info {
    root /usr/share/nginx/www;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /usr/share/nginx/www/info.php;
}

事实上现在这是有道理的,因为我费心去阅读文档......

答案3

这对我有用:

## Your root already needs to be defined
# root /your/web/root/path
location / {
    try_files $uri $uri/ $uri.php =404;
    index index.php index.html;
}

当点击一个 url ( http://somedomain.com/some/path/action) 时,它将首先尝试some/path/action,然后some/path/action/[index.php],然后some/path/action.php,如果找不到文件,则会失败并出现 404 错误。

相关内容