URL не найден при попытке использовать тонкий фреймворк с PHP и Apache - PullRequest
0 голосов
/ 11 октября 2019

У меня есть этот код с использованием slim framework и php с apache2 на linux:

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require '../../vendor/autoload.php';

$app = new \Slim\App;

#doesn't work results in URl not found in browser
$app->get('/hello','sayhi');

#works, when i just type in 'localhost/' into my webbrowser
$app->get('/',function()
{
return 'testing';
});





$app->run();

#functions
function sayhi()
{
  echo 'hello world again';
}

.htaccess (тот же каталог, что и мой файл index.php)

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

000-default.conf имеет documentroot для каталога, где мой php-файл и файл .htaccess.

Когда я набираю 'localhost /' в моем веб-браузереанонимная функция выполняется. Это то, что он будет делать, если сервер получит '/'

Однако, когда я набираю 'localhost / hello', это приводит к тому, что URL не найден, когда он должен выполнить функцию 'sayhi', когда сервер получает этоТип URL.

Почему он это делает? что-то не так в моем коде, так как я не понимаю, как это сделать.

Я также попытался установить опцию для каталога моего php-файла

AllowOverrideВсе

Однако это приводит к внутренней ошибке 500, когда у меня установлена ​​эта опция. Я пытался следовать этому руководству: 500 внутренняя ошибка руководство безрезультатно.

Я не знаю, как это отсортировать, помогите?

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Вы можете указать Apache перенаправить все маршруты в индекс. Попробуйте что-то вроде своего vhost или файла .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [QSA, L]
0 голосов
/ 11 октября 2019

Я думаю, вам нужно настроить apache так, чтобы все запросы попадали в index.php, в котором находится ваш код. Кажется, что когда вы запрашиваете localhost/hello, ваш веб-сервер пытается найти файл hello.

...