мой .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
благодаря
Поскольку URI, начинающий api
является тем же обработчиком PHP api.php
я подозреваю, что это проблема MultiViews
.
Выключите его с помощью этой строки в начале вашего.htaccess:
Options -MultiViews
MultiViews
используется модулем content negotiation
Apache, который запускается до mod_rewrite
и заставляет Apache-сервер сопоставлять расширения файлов. Так что /api
может быть в URL, но он будет служить /api.php
.