首页 > 解决方案 > 自定义 PHP 文件不会加载(在 magento 2 安装 ubuntu + nginx 之外)

问题描述

我试图让一个位于 Magento 2 安装根目录中的自定义脚本,但是当我在浏览器上导航到它时,它返回 404 错误。为了进行测试,我尝试创建一个空的 php 文件(abc.php),然后在浏览器(域/abc.php)中导航到它,即使我确定该文件存在于该位置,它仍然会返回 404。我已经尝试 CHMODding 到 777 并将文件的所有权更改为与目录的其余部分相同,但我仍然得到这个 404。

我正在使用 ubuntu 18.04 + NGINX 作为 Web 服务器来运行 Magento 2。Magento 2 安装正在浏览器上运行,只是我导航到的任何自定义脚本都会返回 404。有没有人有过类似的事情或知道该怎么做接下来调试这个问题:/?

标签: ubuntumagentonginxmagento2

解决方案


如果您根据 Magento 2 的建议设置了 NGINX,那么它将只允许从定义明确的已知 PHP 文件列表中执行 PHP。也就是说,如果你看这里,你会注意到:

location ~ ^/(index|get|static|errors/report|errors/404|errors/503|health_check)\.php$ {
    ...
    fastcgi_pass   fastcgi_backend;
    ...
}

这:_

location ~* (\.php$|\.htaccess$|\.git) {
    deny all;
}

这实质上意味着拒绝执行除/index.php,/get.php等之外的任何 PHP 文件。

因此,为了允许执行自定义 PHP 文件,您需要在第一个位置调整 REGEX,以包含自定义文件的名称,例如:

location ~ ^/(index|get|static|errors/report|errors/404|errors/503|health_check|test)\.php$ {

/test.php除了其他已知的 PHP 入口点之外,上述内容还允许执行。

此外,如果您的 Magento 网站在 NGINX 配置中的根目录是/path/to/pub(同样,根据建议),那么您需要将自定义文件放在该pub子目录中,而不是放在 Magento 的实际根目录中。


推荐阅读