Следующее правило:
RewriteRule ^api/([\w-]+)/?$ api.php?method=$1 [QSA]
На локальном сервере Apache 2.4 он позволяет мне переписать:
/api/create-account/?name=abcd
в
/api.php?method=create-account&name=abcd
На производственном сервере, который является Apache 2.2, запрос отправляется на api.php
. Но в моем скрипте не найден параметр строки запроса. Если я сброшу $_REQUEST
, $_GET
или $_POST
, я получаю пустой массив.
Что мне не хватает?
Вам нужно отключить Multiviews:
Options -Multiviews
Multiviews – это опция mod_negotiation, которая сообщает ему попробовать сопоставить запрос с физическими файлами. Когда он видит запрос как /api/somtehin
а затем видит, что есть файл с именем api.php
, он сразу же отобразится в этом файле, полностью обходя mod_rewrite.