Развертывание проекта PHP Slim на Hostgator с использованием субдомена - PullRequest
0 голосов
/ 24 мая 2019

У меня очень простое приложение Slim, которое отлично работает на моем компьютере с Ubuntu, но я получаю ошибку 500 при развертывании его в общей учетной записи Hostgator с использованием субдомена.

Я подозреваю, что проблема заключается в моем файле .htaccess.

Структура моих файлов:

project/
├──api/
│  ├── .htaccess
│  ├── services.php
├──src/
   ├──vendor/

Приложение My Slim (services.php):

<?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();

Мой файл .htaccess:

<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>

Я создал поддомен (api.mydomain.com) с проектом / api / в качестве корня документа.

Когда я делаю запрос POST в моей локальной установке на

127.0.0.1/api/services.php/myEndpoint

работает как положено и возвращает данные. Однако, когда я делаю тот же запрос к моему поддомену Hostgator:

api.mydomain.com/services.php/myEndpoint

Я получаю ошибку 500.

Обратите внимание, что если я добавлю простой файл test.php в каталог api /, который только что-то печатает, например,

<?php
  echo "OK"
?>

и я захожу на api.mydomain.com/test.php, он отлично работает и печатает строку.

Что мне нужно изменить или добавить в мой .htaccess для работы моего тонкого приложения?

1 Ответ

0 голосов
/ 24 мая 2019

Я решил это, выполнив две вещи:

  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

...