2015-01-01 2 views
2

У меня есть следующий файл .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.

Что я делаю неправильно? Спасибо.

ответ

1

Похоже, что у вас нет mod_rewrite enabled. Поскольку он не включен, контейнер IfModule игнорируется. См: How to enable mod_rewrite for Apache 2.2

Вы должны отключить Multiviews для того, чтобы это работало, в противном случае mod_negotiation активируется и автоматически сопоставляет /api/ к /api.php, не давая mod_rewrite шанс сделать что-нибудь. Так что вам нужна строка:

Options -MultiViews 

Если вы не можете включить mod_rewrite, можно альтернативно изменить api.php сценарий так, что он выглядит в переменной PATH_INFO:

$_SERVER['PATH_INFO'] 

, чтобы получить " пример ".

+0

mod_rewrite включен. Я проверил phpinfo() и использовал функцию in_array ('mod_rewrite', apache_get_modules()). Это общий сервер, к которому у меня нет административного доступа, если это имеет значение. Кроме того, переписывание фактически работает - оно отправляет/api/example в /api.php?m=example. – lampej

+0

На самом деле я беру это обратно, MultiViews делает/api/безотносительно перенаправления на api.php ..., а затем я теряю $ _GET. Я переместил Options -MultiView за пределами IfModule, и это сработало. Я все еще не понимаю, почему я получил ошибку 404, когда она была внутри IfModule. – lampej

+0

Я принял это как ответ, потому что MultiViews был частью проблемы. Я также должен был предоставить полный путь к api.php. – lampej

Смежные вопросы