我有一个非常简单的Slim应用程序,可在我的Ubuntu计算机上正常工作,但使用子域将其部署到Hostgator共享帐户时出现500错误。
我怀疑问题出在我的.htaccess文件中。
我的文件结构为:
<header>
<h2 contentEditable role='textbox' aria-multiline='true'>And stay alive...</h2>
</header>
我的Slim应用(services.php):
project/
├──api/
│ ├── .htaccess
│ ├── services.php
├──src/
├──vendor/
我的.htaccess文件:
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
require_once '../src/vendor/autoload.php';
$c = new \Slim\Container();
$c['notFoundHandler'] = function ($c) {
return function ($request, $response) use ($c) {
return $c['response']
->withStatus(404)
->withHeader('Content-Type', 'text/html')
->write('Invalid endpoint');
};
};
$app = new \Slim\App($c);
$app->post('/myEndpoint', function (Request $request, Response $response, array $args) {
if($request->getHeader("key") != null && $request->getHeader("key")[0] == "123456789="){
$reqdata = $request->getParsedBody();
$data = $reqdata['data'];
return json_encode('{"data":'.$data.',"response":"OK","errorcode":"0"}');
} else {
return '{"data":"","response":"Access denied","errorcode":"9999"}';
}
});
$app->run();
我创建了一个以project / api /作为文档根目录的子域(api.mydomain.com)。
当我在本地安装中向
发出POST请求时<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . services.php [QSA,L]
</IfModule>
# Use PHP71 as default
AddHandler application/x-httpd-php71 .php
<IfModule mod_suphp.c>
suPHP_ConfigPath /opt/php71/lib
</IfModule>
按预期方式工作并返回数据。但是,当我向Hostgator子域发出相同的请求时:
127.0.0.1/api/services.php/myEndpoint
我收到错误500。
请注意,如果我将一个简单的test.php文件添加到我的api /目录中,该文件仅显示某些内容,例如
api.mydomain.com/services.php/myEndpoint
然后转到api.mydomain.com/test.php,它可以正常工作并打印字符串。
我需要更改或添加.htaccess文件以使我的细长型应用程序正常工作吗?
答案 0 :(得分:0)
我通过做两件事解决了它:
我将项目文件夹移动到public_html,再次创建了子域,并将其指向项目目录。
我更新了我的.htaccess文件IfModule mod_rewrite.c部分。现在看起来像这样:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ services.php [QSA,L]
</IfModule>
与上一个的区别是我添加了这一行:
RewriteBase /
还有一个:
RewriteRule . services.php [QSA,L]
已更新为此:
RewriteRule ^ services.php [QSA,L]
我在这里获得了.htaccess修复程序:
https://discourse.slimframework.com/t/deploy-slim-project-to-hostgator-using-subdomain/3187/7