【问题标题】:Custom PHP files wont load (Outside of magento 2 installation ubuntu + nginx)自定义 PHP 文件不会加载(在 magento 2 安装 ubuntu + nginx 之外)
【发布时间】:2025-12-27 20:55:11
【问题描述】:

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

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

【问题讨论】:

    标签: ubuntu magento nginx magento2


    【解决方案1】:

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

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

    还有this

    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$ {
    

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

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

    【讨论】:

    • 谢谢丹妮拉!不是 NGINX 配置而是 HTACCESS 文件将文件重定位到 404
    • @MichaelGuimaraes .htaccess 文件属于 Apache,但您说您使用的是 nginx。所以要么你根本不使用 nginx,要么......?
    【解决方案2】:

    如果在域内试试这个:-

    localhost/domailname/filename.php
    

    如果文件位于域外,请尝试此操作

    localhost/filename.php
    

    【讨论】: