У меня есть следующий файл .htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule api/(.*)$ api.php?m=$1 [QSA,NC,L]
</IfModule>
URL, переписывание работает. Я могу пойти в http://myserver.com/api/example, и он будет вести себя так, как если бы я пошел на http://myserver.com/api.php?m=example. Проблема в том, что переменные PHP $ _REQUEST и $ _GET пусты. Разве я не могу получить значение $ _REQUEST ['m']?
После некоторых поисковых запросов, я нашел предложение отключить MultiViews. Если я добавлю Options -MultiViews
, я получаю ошибку 404.
Что я делаю неправильно? Спасибо.
mod_rewrite включен. Я проверил phpinfo() и использовал функцию in_array ('mod_rewrite', apache_get_modules()). Это общий сервер, к которому у меня нет административного доступа, если это имеет значение. Кроме того, переписывание фактически работает - оно отправляет/api/example в /api.php?m=example. – lampej
На самом деле я беру это обратно, MultiViews делает/api/безотносительно перенаправления на api.php ..., а затем я теряю $ _GET. Я переместил Options -MultiView за пределами IfModule, и это сработало. Я все еще не понимаю, почему я получил ошибку 404, когда она была внутри IfModule. – lampej
Я принял это как ответ, потому что MultiViews был частью проблемы. Я также должен был предоставить полный путь к api.php. – lampej