PHP Rest API, перенаправляющий ПОЧТОВЫЙ маршрутизатор
Я пытаюсь написать простое спокойное php-приложение. Я пытаюсь написать один index.php маршрутизатор.
Файл .htaccess, который у меня сейчас есть, это
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule api/^(.*)$ api/index.php?_url=/$1 [QSA,L]
</IfModule>
Я добавил RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
, чтобы принудительно использовать косую черту, как показано здесь .
Вызов var_dump($_POST);
или var_dump($_GET);
по-прежнему возвращает пустой массив, значения POST по-прежнему удаляются. Отправка GET и POST оба возвращают GET при оценке: $_SERVER['REQUEST_METHOD'];
.
Как мне это правильно реализовать? Кроме того, я не могу использовать библиотеку и должен реализовать свой собственный маршрутизатор.
Любая помощь или совет приветствуются.
РЕДАКТИРОВАТЬ:
Начал с нуля:
Url-адрес для запросов должен быть http://localhost/api/*
Текущий файл .htaccess, расположенный в папке api, выглядит следующим образом:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ controller.php?do=$1 [L,QSA]
Где controller.php
сидит в /var/www/api
Файл Vhost в /etc/apache2/sites-available
Называется api.conf
И выглядит так это:
<VirtualHost *:*>
ServerName test.example.com
ServerAlias www.test.example.com
DocumentRoot /var/www/api/
<Directory "/var/www/api/">
Allow from all
AllowOverride all
Options +Indexes
</Directory>
</VirtualHost>
Все та же проблема:
The requested URL /api/something was not found on this server.
1 answers
Я решил эту проблему:
Apache перезаписал файл default.conf
в папке "Доступные сайты", когда я выполнил обновление, которое я пропустил...
Мне нужно было добавить к 000-default.conf
<Directory /var/www/>
AllowOverride All
Я обнаружил, что mod_rewrite теперь отключен:
in_array('mod_rewrite', apache_get_modules());
//or
var_dump(apache_get_modules());
Итак, для повторного включения:
a2enmod rewrite
service apache2 restart
Надеюсь, это поможет другим.