Маршрутизация работает на локальном хосте, но не на реальном сервере.
-
20-09-2019 - |
Вопрос
Когда я захожу на свой сайт через MAMP, он работает отлично.
локальный хост/сайт/о нас/
Когда я загружаю его на свой удаленный сервер и получаю к нему доступ вот так
все запросы возвращаются к настройкам «по умолчанию», установленным в bootstrap.php
.
Вот мои настройки маршрута.
Route::set('default', '(<page>)')
->defaults(array(
'page' => 'home',
'controller' => 'page',
'action' => 'index',
));
Проблема в том, что всякий раз, когда он загружается на мой сервер, любой запрос типа /about-us/ всегда по умолчанию имеет значение дом как указано при настройке маршрута.Если я изменю это значение по умолчанию на «о нас», каждая страница будет посвящена «о нас».
Кто-нибудь знает, что может быть причиной этого?Спасибо
ОБНОВЛЯТЬ
Вот хак, который работает, но чертовски уродлив.Тем не менее, я бы предпочел знать, почему это не работает так, как ожидалось.
// Hack because I can not get it to go to anything except 'default' below...
$uri = $_SERVER['REQUEST_URI'];
$uri = str_replace(url::base(), '', $uri);
$page = trim($uri, '/');
if ( ! $page) $page = 'home';
Route::set('default', '(<page>)')
->defaults(array(
'page' => $page,
'controller' => 'page',
'action' => 'index',
));
Решение
Ваш код, по сути, представляет собой перехватывающий весь маршрут (он сопоставляется для всех запросов).Вам следует ограничить это вот так.
Route::set('static', '(<page>)', array('page' => 'about-us'))
->defaults(array(
'controller' => 'page',
'action' => 'index',
));
Третий параметр — это регулярное выражение, которое определяет, чему должен соответствовать маршрут.
Этот маршрут будет перенаправлять все, что соответствует регулярному выражению, к контроллеру страницы и его индексному действию.
Затем вы можете использовать $page = $this->request->param('page');
в вашем действии.
Другие советы
Вы не путаете $page с $action?
Если я попробую это сделать, все получится.Вот метод действия моего контроллера:
public function action_index($page = NULL)
{
var_dump($page);
}
Если я перейду к
localhost/site/blup
Я вижу, вижу хороший
string(4) "blup"
эхом.У меня настройка маршрута по умолчанию идентична вашей.
Похоже, автоматическое определение URL-адреса Kohana не работает для настроек вашего сервера...На каком веб-сервере происходит сбой?
Вы можете изменить Request::instance()->execute()...строка в бутстрапе, чтобы начать с:
Запрос::instance($_SERVER['REQUEST_URI'])->execute()...
Это гарантирует, что он использует правильный URI.
Что, как говорится ...как говорит The Pixel Developer, ваш маршрут выглядит...странный ..мне ;)
Но, поскольку он работает на MAMP, проблема, скорее всего, не в маршруте.