我按照本教程用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或作曲家了解不多,所以我没有移动任何东西。谢谢。
很明显为什么它不起作用。看看你的规则:
#root .htaccess
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
- .htaccess 文件中的第一个规则重写根的任何请求,例如
www.example.com
或api.example.com/
到子文件夹/public
。 - 第二条规则对此进行了补充,并重写了对子目录/public 的任何其他请求,例如
api.example.com/test
到api.example.com/public/test
因此,实际上,这两个规则之一将始终触发。
由于您已将 api.example.com 的根设置为/public,因此找不到/public/public
子文件夹;因此,您会收到错误 500。
要解决此问题,您可以尝试删除根 .htaccess 中的两个规则,或者您可以将/api 的根目录设置为不子文件夹。
public/.htaccess 文件具有典型的单入口点配置,应该没问题。
始终在隐身模式下使用全新浏览器来测试更改。