PHP не может увидеть строку запроса от RewriteRule

1

мой .htaccess выглядит

RewriteEngine On
RewriteRule ^api/([^/]*)$ /api.php?method=$1 [L,QSA]

мой api.php выглядит

class API {

    public function __construct()
    {
        require_once('helpers.php');
    }

    public function test()
    {
        dd('hey');
    }

};

$api = new API;
$method = isset( $_GET['method'] ) ? $_GET['method'] : null;

dd($_REQUEST, $_GET);

if( $method && method_exists($api, $method) ){
    $api->{$method}();
}
else {
    exit("Nothing to see here governor.");
}

Тем не менее, когда я посещаю перезаписанный url, например site.com/api/test я вижу

array (size=0)
  empty

если я изменю его на /api.php?method=test или /api/test?method=test я get

array (size=1)
  'method' => string 'test' (length=4)

Почему строка запроса не может быть обнаружена?

Настройка сервера - apache 2.2, php-fmt 5.6

благодаря

  • 0
    это был не режиссёр
Теги:
.htaccess
mod-rewrite
query-string

1 ответ

1
Лучший ответ

Поскольку URI, начинающий api является тем же обработчиком PHP api.php я подозреваю, что это проблема MultiViews.

Выключите его с помощью этой строки в начале вашего.htaccess:

Options -MultiViews

MultiViews используется модулем content negotiation Apache, который запускается до mod_rewrite и заставляет Apache-сервер сопоставлять расширения файлов. Так что /api может быть в URL, но он будет служить /api.php.

  • 1
    Чтобы подтвердить, это решило мою проблему!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню