PHP Slim Framework: Запрошенный URL-адрес не был найден на этом сервере
Для одного из проектов я использую Slim Framework http://www.slimframework.com / для создания API restful в PHP.
Я выполнил ручную установку фреймворка, скопировав его в папку проекта PHP, используя инструкции по адресу https://github.com/slimphp/Slim .
Позже я также обновил свой.htaccess.
Для моего проекта у меня следующая структура каталогов
project\
----slim\
----tests\
----index.php
----.htaccess
Для этого вызов Get, т.е. http://someIp/project / работает для меня. Он получает стандартное "Добро пожаловать в Slim! Поздравляю! Ваше приложение Slim запущено. Если вы впервые используете Slim, начните с этого урока "Привет, мир"." Однако сообщение/исправление/удаление и другие функции get не работают. Даже не поздоровался. Это выдает ошибку "Не найдено".
Http://someIp/project/hello/:name Запрошенный URL/project/hello/:имя не было найдено на этом сервере.
Http://someIp/project/post Запрошенный URL-адрес/проект/сообщение не был найден на этом сервере.
Обновил мой файл .htaccess следующим образом:
RewriteEngine On
RewriteBase /project/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
И все же он терпит неудачу.
Когда я внес изменения в конфигурационный файл apache для AllowOverride = all, это не удалось даже для вызова GET на index.php . Конечно, это не сопоставление с .htaccess.
Я все еще не знаю, какие изменения мне нужно внести в файл .htaccess или любой другой файл, чтобы он заработал.
Вот код:
\Slim\Slim::registerAutoloader();
/**
* Step 2: Instantiate a Slim application
*
* This example instantiates a Slim application using
* its default settings. However, you will usually configure
* your Slim application now by passing an associative array
* of setting names and values into the application constructor.
*/
$app = new \Slim\Slim();
/**
* Step 3: Define the Slim application routes
*
* Here we define several Slim application routes that respond
* to appropriate HTTP request methods. In this example, the second
* argument for `Slim::get`, `Slim::post`, `Slim::put`, `Slim::patch`, and `Slim::delete`
* is an anonymous function.
*/
// GET route
$app->get(
'/',
function () {
$template = "hi";
echo $template;
}
);
//$app->get(
// '/v1/status/',
// function() {
// echo "status";
// }
//);
//
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
// POST route
$app->post(
'/post',
function () {
echo 'This is a POST route';
}
);
// PUT route
$app->put(
'/put',
function () {
echo 'This is a PUT route';
}
);
// PATCH route
$app->patch('/patch', function () {
echo 'This is a PATCH route';
});
// DELETE route
$app->delete(
'/delete',
function () {
echo 'This is a DELETE route';
}
);
/**
* Step 4: Run the Slim application
*
* This method should be called last. This executes the Slim application
* and returns the HTTP response to the HTTP client.
*/
$app->run();
1 answers
Для меня сработали следующие шаги:
Изменения в файле apache2.conf
1. Get the path of running Apache
ps -ef | grep apache
Append -V argument to the path
/usr/sbin/apache2 -V | grep SERVER_CONFIG_FILE
2. Naviagte to apache2.conf
vi /etc/apache2/apache2.conf
3. Update the file Replace "AllowOverride None" to "AllowOverride All"
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
4. Restart apache2 after
service apache2 restart
OR
apachectl -k graceful
Изменения в .htaccess
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
Изменения в .htaccess внутри подкаталога
RewriteEngine On
RewriteBase /project
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
Включить mod_rewrite для Apache 2.2
1. Type the following command in the terminal
a2enmod rewrite
2. Restart apache2 after
service apache2 restart