Маршрутизация работает на локальном хосте, но не на реальном сервере.

StackOverflow https://stackoverflow.com/questions/2271868

Вопрос

Когда я захожу на свой сайт через MAMP, он работает отлично.

локальный хост/сайт/о нас/

Когда я загружаю его на свой удаленный сервер и получаю к нему доступ вот так

http://www.server.com/site/about-us/

все запросы возвращаются к настройкам «по умолчанию», установленным в 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, проблема, скорее всего, не в маршруте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top