
В линейке 1.5 появилась замечательная вещь – создание SEF ссылок стандартным образом, без использования сторонних компонентов. В компонентах за поддержку данной возможности отвечает специальной файл router.php, в стандартных он существует, но не все разработчики сторонних компонентов включают эту возможность в свои расширения.
Для активации этой прекрасной опции необходимо включить три переключателя (скрин и примеры ниже) и переименовать файл htaccess.txt в .htaccess (да да, именно так - с точкой вначале. Стандартный файловый менеджер windows "explorer" может не позволить этого сделать, тогда следует использовать сторонние менеджеры - TotalComm-r, Far, DOpus и подобные).
При этом если мы используем все три опции – необходимо чтобы на сервере была поддержка
mod_rewrite (убедиться можно посмотрев страницу «админка – помощь – информация о системе - информация PHP» либо обратиться в службу поддержки хостинга)
Примеры для каждого из вариантов
С выключенным SEF ссылка на блог категории и конечный материал из этой ленты имеют следующие адреса. Ниже мы поочередно включаем каждый переключатель и наблюдаем за результатом
http://domen.ru/index.php?option=com_content&view=category&layout=blog&id=1&Itemid=53
http://domen.ru/index.php?option=com_content&view=article&id=1:welcome-to-joomla&catid=1:latest-news&Itemid=53
Базовые возможности включают в себя три опции:
1 – «Включить SEO» - убираем все некрасивые параметры из ссылки
http://domen.ru/index.php/menublog - ссылка на блог категории, где menublog – alias пункта меню на данную страницу
http://domen.ru/index.php/menublog/1-welcome-to-joomla - страница конечного материала, где welcome-to-joomla – алиас материала а 1 соответственно его ID
2 – «Использовать mod_rewrite» - избавляемся от index.php в начале ссылки
http://domen.ru/menublog - ссылка на блог категории
http://domen.ru/menublog/1-welcome-to-joomla - страница материала
3 - «Добавить суффикс к URL» - добавляем окончание страниц как html
http://domen.ru/menublog.html - страница блока категории
http://domen.ru/menublog/1-welcome-to-joomla.html - страница материала
Частые вопросы, связанные с стандартным SEF
Почему у меня ссылка имеет вид http://domen.ru/2009-10-22-22-40-41.html
По умолчанию если не прописан алиас\псевдоним для объекта – в таком формате подставляется дата его создания. Чтобы избежать – необходимо руками создавать алиасы (на латиннице) либо использовать соответствующий плагин автоматической транслитерации названий. См. ссылки в конце темы
Что такое алиас (alias), он же псевдоним?
При создании\редактировании каждого объекта движка (раздел, категория, материал, пункт меню) рядом с полем "Заголовок" есть поле ввода алиаса\псевдонима
Что за цифры подставляются перед алиасом:
Это ID раздела\категории\материала, насколько понимаю сделано для предотвращения создания одинаковых страниц. Для избавления для стандартных компонентов существует плагин HP Router (есть некоторые проблемы, описаны по ссылке ниже)
Поставил сторонний компонент а в нем адреса получаются вида http://domen.ru/ru/ac.html?ordering=11&letter=B
Значит данный компонент не содержит в себе файла router.php для поддержки стандартного SEF, как его написать самостоятельно – инструкция по ссылке ниже.
Создается ли дополнительная нагрузка на сервер?
Да, но крайне незначительная, любой сторонний компонент SEF даст в разы большую. Ниже два примера стандартной отладочной информации для страницы типа блог категории, показывающей 5 материалов
SEF выключен
1
23
45
67
| Application afterLoad: 0.000 seconds, 0.28 MB
Application afterInitialise: 0.119 seconds, 2.66 MBApplication afterRoute: 0.153 seconds, 3.22 MB
Application afterDispatch: 0.782 seconds, 7.56 MBApplication afterRender: 1.040 seconds, 8.24 MB
Использование памяти 8687272Запросов 14 |
SEF включен
1
23
45
67
| Application afterLoad: 0.001 seconds, 0.28 MB
Application afterInitialise: 0.122 seconds, 2.66 MBApplication afterRoute: 0.163 seconds, 3.22 MB
Application afterDispatch: 0.878 seconds, 7.61 MBApplication afterRender: 1.161 seconds, 8.35 MB
Использование памяти 8802200Запросов 14 |
Меня не устраивает функционал стандартного SEF
Тогда остается использовать сторонние расширения, подробнее с ними можно ознакомиться по ссылке
http://joomlaforum.ru/index.php/board,108.0.html
Дополнительные ссылки:
Как создать router.php в своем компоненте
Плагин HP Router - убираем ID из ссылки
Плагин ukr_rus_allias транслит заголовков материалов J1.5
Mod_rewrite – что это такое
Кирилические ссылки в стандартном SEF
Подборка расширений для SEF на extensions.joomla.org
Комментарии
$str = preg_replace(array('/\s+/','/[^A-Za-z0-9\-]/'), array('-',''), $str);
на$str = preg_replace(array('/\s+/','/[^A-Za-z0-9\-_]/'), array('-',''), $str);
в файле libraries\joomla\filter\filteroutput.php (91 строка)