По теме. Стандартными способами в Двойке невозможно сделать страницы в корне сайта (с адресом типа site.ru/page.html) без указания типа контента в адресе. В некоторых случаях это создаёт проблемы при разработке. Зато можно попробовать вариант с заменой части адреса в htaccess. Идея в том, чтобы создать тип контента, который будет использоваться для подобных страниц. Назвать его, например, root. И потом в htaccess написать правила для RewriteRule, чтобы если в адресе есть строка '.html', то есть расширение с точкой, указывающее, что запрашивается страница, а не раздел, и при этом на втором и далее местах в строке отсутствует слеш '/', то есть, запрашиваемая страница находится в корне, тогда перед адресом страницы после домена сайта добавляем 'root/'
То есть, если приходит URI вида /page.html, то меняем его на /root/page.html. Естественно, делать это не редиректом, чтобы для пользователя адрес остался прежним, в корне сайта.
Особенности варианта:
1. Страницы должны быть только одного типа контента. В большинстве случаев этого хватает.
2. В htaccess нужно менять REQUEST_URI, так как все запросы страниц и раделов перенаправляются на index.php, а ядро потом определяет реальный адрес по REQUEST_URI.
У меня не хватает знаний по htaccess, сходу сделать так не получилось. Может кто-то сможет реализовать идею? Если это возможно, конечно.
Если это невозможно, тогда остаётся только хак ядра, что не очень хорошо.
Как вариант для разработчиков InstantCMS 2 для будущих версий, можно будет сделать опцию в настройках, где админ сможет указать тип контента, который будет использоваться в случае, если запрашивается страница без типа, то есть, страница из корня сайта.
Но вопрос можно решить хаком. Дописываем в файле \system\core\core.php в функции route($uri) на 574 строке вместо:
// Определяем контроллер из первого сегмента // Определяем действие из второго сегмента // Определяем параметры действия из всех остальных сегментов }
// Добавляем проверку на количество передаваемых параметров... if (sizeof($segments)==1) { // Если оказался один параметр, предполагаем что это статическая страница $this->uri_controller = 'pages'; // жестко вписываем имя контроллера $this->uri_action = $segments[0]; // и передаем аргумент } else { // в противном случае работаем как и задумано // Определяем контроллер из первого сегмента // Определяем действие из второго сегмента // Определяем параметры действия из всех остальных сегментов } }
Решение найдено. В принципе, можно было бы закрывать тему. Но подожду немного, может кто-то сможет сделать то же самое через .htaccess. Мне кажется, что для непрограммистов менять что-то в .htaccess проще, чем в скриптах. Да и при обновлении системы хаки теряются и их нужно делать заново.
Если вам нужно "не стандартное" поведение системы, вам придется изменять Ядро и следующие обновления проводить в ручном режиме.Да и при обновлении системы хаки теряются и их нужно делать заново.
У меня просто вопрос: Какая разница между mysite.ru/page.html и mysite.ru/page/page.html?
С точки зрения SEO-оптимизации — разницы никакой. А вот когда проект подрастет и наполнится контеном, когда вы в него вложите Н-челочасов, случайно обновится и развалится сайт — в это время вы пожалеете что придумали подобные не нужные изменения.
А задачи бывают разные. Иногда заказчики хотят видеть страницы в корне сайта, иногда переводится на новую CMS существующий сайт с сохранением старых страниц по их прежним адресам. Да мало ли какие нужды бывают. Поэтому лучше иметь возможность выбора как сделать желаемое, чем не иметь её.
С точки зрения СЕО — спорный вопрос. Все современные поисковики прекрасно переваривают и выводят в выдачу страницы с любыми адресами, даже без ЧПУ. Но адреса с ЧПУ нагляднее, в том числе и для пользователей в результах выдачи. И как по мне, так некоторые адреса в корне смотрятся лучше. Например, site.ru/about.html в корне выглядит проще и понятнее, чем site.ru/pages/about.html в непонятном разделе pages. Это моё субъективное восприятие, конечно. Каждый воспринимает по-своему. Но и это тоже вполне подходящая причина иметь возможность выбора разных вариантов для разных пользователей.
Я у себя на сайте решил поменять pages на info, с помощью стандартного механизма iCMS2, о котором рассказывал r2. Получится site.ru/info/about.html, в моем случае вполне приемлемо))Например, site.ru/about.html в корне выглядит проще и понятнее, чем site.ru/pages/about.html в непонятном разделе pages.
Вот исправленная версия:
$this->uri_controller = 'pages'; $this->uri_action = $segments[0]; } else { // Определяем контроллер из первого сегмента // Определяем действие из второго сегмента // Определяем параметры действия из всех остальных сегментов } }
nashaliga.com.ua/onlytime.html — тут я записываю среднее время загрузки страницы
Пишите подробнее, пожалуйста. Вас будет легче понять.
Что касается указанной Вами странички, то судя по её коду она открывается в обход движка ICMS, напрямую с диска. Хак тут непричём.
Этот хак все страницы в корне сайта считает страницами с типом контента 'pages'. То есть, site.ru/about.html в корне — это на самом деле страница site.ru/pages/about.html. Таким образом можно сделать сколько угодно страниц с типом 'pages' и потом поделать ссылки на них из корня, без папки с категорией.