首页 > 解决方案 > 简单的 PHP API 在 Cpanel 中给出错误 500

问题描述

我按照本教程使用 PHP 制作了一个简单的 API。它在我的电脑上完美运行。我在源文件夹中添加了一些其他 php 文件,并在项目中添加了一个作曲家包(Firebase/JWT),因此创建了一个供应商文件夹和几个作曲家文件。现在项目文件夹如下所示:

/
- /plublic
-- .htaccess
-- index.php // requires src/functions.php
- /src
-- connection.php
-- functions.php // requires other src/.php files and JWT from composer
-- panel.php
-- responses.php
- /vendor
-- /composer // and files
-- /firebase // and files
-- autoload.php
.htaccess
composer.json
composer.lock

我使用子域(api.mydomain.com)将它上传到我的 cpanel 主机(在 api/)。我使用 cpanel 创建了子域,并首先将根文件夹设置为 api/public 但它不起作用(500 错误)。然后我尝试将子域指向 api/ 但这也不起作用。我能做些什么?我认为问题出在 .htaccess 文件中。

#root .htaccess
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]

#/public .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

我不太了解 .htaccess 或作曲家,所以我没有动任何东西。谢谢。

标签: php.htaccesscomposer-phpcpanel

解决方案


很明显为什么它不起作用。看看你的规则:

#root .htaccess
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
  1. .htaccess 文件中的第一条规则重写根的任何请求,例如,www.example.com或对子文件api.example.com/夹的请求/public
  2. 第二条规则对此进行了补充,并重写了对子目录 /public 的任何其他请求,api.example.com/test例如api.example.com/public/test

因此,有效地,这两条规则之一将始终触发。

由于您已将 api.example.com 的根目录设置为 /public,因此无法找到/public/public子文件夹;因此,您会收到错误 500。

要解决此问题,您可以尝试删除根 .htaccess 中的两个规则,或者您可以将 /api 的根设置为不设置子文件夹。

public/.htaccess 文件有一个典型的单入口点配置,应该没问题。

始终在隐身模式下使用新的浏览器来测试更改。


推荐阅读