使用子域将PHP Slim项目部署到Hostgator

时间:2019-05-24 05:27:35

标签: php .htaccess slim shared-hosting

我有一个非常简单的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文件以使我的细长型应用程序正常工作吗?

1 个答案:

答案 0 :(得分:0)

我通过做两件事解决了它:

  1. 我将项目文件夹移动到public_html,再次创建了子域,并将其指向项目目录。

  2. 我更新了我的.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