Когда речь заходит о поисковой оптимизации, возникает ощущение, что касаешься чего-то волшебного. SEO оптимизаторы для меня - это некие шаманы, пытающиеся ублажить могучих Богов поиска. Они не говорят иначе как "поисковики любят" и "поисковики не любят" SEO рекомендации зачастую противоречат здравому смыслу, но они работают. Примечательно, что на основе "анализа" сайтов оптимизаторы часто дают одни и те же рекомендации. Пару из них мне посчастливилось выполнить.
[spoiler]
На этом заканчиваю лирику и перехожу к сухому изложению. Базовые SEO рекомендации:
При запросе любых адресов, содержащих неосновные хосты (например, http://1c-bitrix.ru/ без префикса www) необходимо, чтобы сервер отдавал ответ HTTP/1.1 301 Moved Permanently. При этом в поле Location должен быть прописан URL, содержащий основной хост ресурса (http://www.1c-bitrix.ru/).
На сайте присутствуют повторяющиеся страницы вида: http://www.1c-bitrix.ru/ и http://www.1c-bitrix.ru/index.php. Данные страницы проиндексированы поисковыми системами и отдают ответ сервера HTTP/1.1 200 ОК. Необходимо оставить первый вариант страниц, а для страниц-дубликатов настроить переадресацию с ответом сервера HTTP/1.1 301 Moved Permanently на соответствующие страницы.
Или попросту говоря, надо чтобы при открытии сайта "без www" он перебрасывал на адрес "с www" и при переходе на index.php перебрасывал на папку (адрес с "/" на конце).
Разумно использовать для этого mod_rewrite. Модуль почти всегда доступен на хостинге, и не требуется дополнительная обработка в php.
То со второй оказалось не так просто. Нам надо проверить переменную {%REQUEST_URI}, если она заканчивается на "/index.php", перенаправить на "/". Всё дело в том, что почти всегда на Apache ставится модуль mod_dir, который открывает файл index.php при обращении к папке, его содержащей. А хуже всего то, что этот модуль переопределяет{%REQUEST_URI} так, что в обоих случаях (http://bitrix.ru/ и http://bitrix.ru/index.php) срабатывает правило:
заканчивается на "/index.php"
Но как известно, mod_rewtite это тоже "Damned cool voodoo"
Готового решения в сети не нашёл, но в результате экспериментов было выявлено, что при обращении к папке срабатывает условие:
заканчивается на "/"
(Т.е. получается двойственность: срабатывают оба условия).
После долгих мытарств, подробности которых пропущу, получилось вот такое условие:
прервать обработку, если обращение идёт к папке (URI заканчивается на "/");
прервать обработку если уже был сделан внутренний редирект (без этого условия уходит в бесконечный цикл, почему, не знаю);
если метод запроса GET (мы не хотим, чтобы потерялись данные формы, пришедшие через POST) и URI заканчивается на /index.php - сделать редирект на тот же URI, но без "index.php";
Теперь оба правила и включение модуля mod_rewrite для тех, кто любит сразу получать готовые решения
Вся эта борьба за переменные между модулями mod_dir и mod_rewrite в совокупности с магией вопроса напомнила мне игру из детства Mortal Combat, в которую играл на Dendy. Чтобы пост не выглядел скучно, напоследок вставляю скрин игры
В моём случае mod_rewrite - это LIU KANG, он победил!
изза наличия у апача порта 8888 переход происходит на сайт:8888 - такой адрес не обрабатывается из вне (к ури добавляется хост плюс порт) пока попробовали модернизировать с явным указанием хоста без порта
помогло, но вот странички с адресом типа 1c-bitrix.ru/products/index.php/ахинея открывается главная страница компонента, вместо 404, вот как с этим бороться?
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».