Псевдонимы в Static page (url без page)

Требуется изменить формат вывода статических страниц, с domen.ru/page/articles/article1/ на domen.ru/articles/article1/ или более лучший вариант domen.ru/articles/article1.html

при добавлении в config.local.php
$config['router']['uri']['~^articles$~i'] = "page/articles";

создаётся псеводоним для страницы domen.ru/articles/ а вложенные страницы отображаются в формате domen.ru/page/articles/article1/

Как создать псевдонимы для вложенных страниц?

14 комментариев

avatar
ну самый простой вариант в конфиг файле плагина page дописать
Config::Set('router.page.articles', 'PluginPage_ActionPage');

Странички будут доступны и через domen.ru/page/ и через domen.ru/articles/

Редактирование\создание удаление всеравно через domen.ru/page/, так в шаблонах зашито
avatar
этот вариант не работает
avatar
тока что у себя на локал хосте проверил. норм работает.
avatar
А так (для domen.ru/articles/article1/)

$config['router']['uri']['~^articles/(.+)$~i'] = "page/\\1";

для domen.ru/articles/article1.html

$config['router']['uri']['~^articles/(.+)\.html$~iU'] = "page/\\1";

оба варианта одновременно:

$config['router']['uri']['~^articles/(.+)(\.html)?$~iU'] = "page/\\1";
avatar
не работает ни один из вариантов
avatar
хм, у себя проверил, работает.
Вставлял в config.local.php
В вашем варианте просто не стояла маска по урлу самой статьи.
avatar
вариант "$config['router']['uri']['~^articles$~i'] = «page/articles»;" работает
а вариант с маской по url статьи почему-то не работает
хотя они отличаются не значительно

тоже самое с вариантом предложенным «gudron»
avatar
а как вообще избавится от page? чтобы site.ru/name/
avatar
очень не рекомендуется, ибо затрёте все остальные экшены (blog, user, topic,.....)
avatar
Вообще если руки прямые или нанять программиста, который допишет пару строчек кода в которых будет сверяться заданное имя с существующими в массиве router.page
avatar
та вроде обсуждалось где-то. Меняли метод

protected function RewriteRequest($aRequestUrl) {
        /**
         * Правила Rewrite для REQUEST_URI
         */
        $sReq=implode('/',$aRequestUrl);
        $sReqAction = isset($aRequestUrl[0]) ? $aRequestUrl[0] : '';
        if(!in_array($sReqAction,array_keys(Config::Get('router.page'))) && $aRewrite=Config::Get('router.uri')) {                      
                $sReq = preg_replace(array_keys($aRewrite), array_values($aRewrite), $sReq);                    
        }
        return ($sReq=='') ? array() : explode('/',$sReq);
}
avatar
это полноценное решение как избавиться от page?
avatar
Это хак, который не дает рерайтам затирать существующие экшены.
А так вы можете любые адреса куда угодно направлять.
Странно, что у вас не работают встроенные рерайты движка.
avatar
У кого-нибудь заработало это? Заменил в Router.class.php

protected function RewriteRequest($aRequestUrl) {
  /**
   * Правила Rewrite для REQUEST_URI
   */
  $sReq=implode('/',$aRequestUrl);
  if($aRewrite=Config::Get('router.uri')) {
    $sReq = preg_replace(array_keys($aRewrite), array_values($aRewrite), $sReq);
  }
  return ($sReq=='') ? array() : explode('/',$sReq);
}


на

protected function RewriteRequest($aRequestUrl) {
  /**
   * Правила Rewrite для REQUEST_URI
   */
  $sReq=implode('/',$aRequestUrl);
  $sReqAction = isset($aRequestUrl[0]) ? $aRequestUrl[0] : '';
  if(!in_array($sReqAction,array_keys(Config::Get('router.page'))) && $aRewrite=Config::Get('router.uri')) {
    $sReq = preg_replace(array_keys($aRewrite), array_values($aRewrite), $sReq);                    
  }
  return ($sReq=='') ? array() : explode('/',$sReq);
}


Но page так и осталось. Я что-то не так делаю? Подскажите.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.