ubuntu - 自定义 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。有没有人有过类似的事情或知道该怎么做接下来调试这个问题:/?
解决方案
如果您根据 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 的实际根目录中。
推荐阅读
- python - 无法在一个函数中在 selenium python 中打开多个窗口?
- android - Facebook SDK 检测 Facebook 应用程序本身中的用户更改
- java - Liquibase
命令给出的结果与直接在 SQL 中运行不同 - facebook - Facebook Open Graph 对象调试器 Shopify 中的无关属性
- amazon-web-services - 单个 NAT 网关可以跨多个 AZ 吗?
- xml - Smack:消息触发“格式不正确”异常
- javascript - 在 JSP 中的 json 数组的值之间添加空格
- angular - Angular 6:PrimeNG 选项卡视图:在选项卡面板之间移动时如何保留状态
- node.js - NPM install throws error internal/modules/cjs/loader.js:800 throw err;
- ios - Xcode 构建错误 - “函数 'sqlite3_key' 的隐式声明在 C99 中无效”