Избавляемся от index.php в адресной строке и дублей контента в Joomla!
В сети встречается довольно много ресурсов использующих систему Joomla! Но многие из веб-мастеров даже не догадываются о существовании такого недочета как дублирование контента из-за неправильной работы стандартного SEF модуля системы.
Если вас интересует как закрыть от индексации дублирующие страницы с index.php в адресе, например: http://site.ru/catalog/ и http://site.ru/catalog/index.php, то достаточно прописать правило в файле robots.txt
Далее речь идет о том, когда в адресную строку мы вводим /index.php/ и url приобретает вид http:// site.ru/index.php/component/page.html, можете заметить что мы в этом случае попадаем на туже страницу, а это значит только одно — дубль.
Кроме того если мы изменяем наш адрес так: http:// site.ru/component/page.html/index.php, мы можем наблюдать еще один дубль все той же страницы. Как же бороться с этим недостатком? А избавиться от /index.php/ в адресной строке легко!
Кроме того если мы изменяем наш адрес так: http:// site.ru/component/page.html/index.php, мы можем наблюдать еще один дубль все той же страницы. Как же бороться с этим недостатком? А избавиться от /index.php/ в адресной строке легко!Когда я начал искать методы борьбы с index.php в адресной строке Joomla!, меня ждало разочарование. Я нашел кучу сайтов, но на всех описывалась проблема работы SEF из-за неверной настройки, либо отсутствия модуля mod_rewrite.
Настройка ЧПУ в Joomla! c использованием стандартного модуля SEF.
Объясню в двух словах:
1) Для начала, чтобы использовать ЧПУ на своем сайте, работающем на Joomla! Вам нужно в настройках системы включить SEF, у меня это находится в разделе Установки Search Engine Optimization. Теперь вы можете оценить всю красоту ваших урлов на сайте, кстати без использования mod_rewrite во всех адресах прописан index.php, чтобы скрыть его из адреса страницы достаточно включить опцию Использовать mod_rewrite. Суффикс URL на Вашей совести (добавляет к адресу страницы .html на конце).
2) Вот и посыпались ошибки, потому как необходимо! переименовать htaccess.txt в .htaccess (обратите особое внимание на точку). Вот и все, теперь мы можем любоваться красивыми адресами страниц.
Вроде бы с настройками все ясно и все отлично работает НО! описанная мной в начале статьи проблема не устранена! Joomla! поразительно устроена и как хочет так и работает, на первый взгляд…
Избавляемся от дублей контента и /index.php/ в адресах страниц Joomla!
Из сложившейся ситуации есть выход, опять же с использованием модуля Apache mod_rewrite.
Внимание! Прежде чем приступить к насилованию системы:
1) сделайте бэкап файлов сайта;
2) дочитайте статью до конца.
Использовать данный материал можете только на свой страх и риск, автор не несет ответственности за работоспособность вашей системы.
Возможно это не лучший способ, но другого я пока не нашел: в файле .htaccess прописываем редирект для адресов содержащих index.php.
Вот так все не весело получается, НО! Во-первых мы избавились от дублей, во-вторых теперь у нас появился большой гемор, а заключается он в том, что Joomla! написана так что большинство модулей как стандартных, так и сторонних перестают работать.
В частности у меня перестал работать Virtuemart и модуль стандартной авторизации. Лечиться это в принципе не сложно, но долго.
Чтобы вновь заработал стандартный модуль авторизации в Joomla! необходимо найти компонент com_users и во всех файлах, где есть ссылка на «index.php» заменить ее на «/» . И тоже самое проделать с модулем mod_login.
Virtuemart вылечился точно также и прекрасно работает (только ссылку я убрал не во всех файлах а лишь там где возникали ошибки). И еще была замечена проблема при использовании в Virtuemart суперглобальной переменной $SERVER[«PHP_SELF»], заменил на REQUEST.
Теперь выкладываю листинг файла .htaccess, по моему мнению таким он должен быть для Joomla:
Источник
Убрать index.php из URL адреса в joomla 3
Хотя движок Joomla 3 и позволяет создавать ЧПУ ссылки (легко читаемые человеком и роботами), но у него все равно есть недостаток при их формировании. Он заключается в подстановке к любому адресу страницы названия файлa index.php.
В итоге ссылки получаются гораздо сложнее и не красивее, чем могли бы быть. Например, вместо /o-komanii ссылка имеет вид /index.php/o-komanii . И так с каждой ссылкой. Это формально может вредить SEO позициям сайта. Да и вообще, зачем нормальному сайту, в каждой ссылке иметь не нужный index.php? Решим эту проблему.
1. Для начала Откройте в админке «Система > Общие настройки». Справа в «Настройки SEO» выставите настройки, как на скрине (здесь главным является пункт «Перенаправление URL», который и позволяет избавиться от index.php):
2. Теперь найдите файл в корне сайта htaccess.txt . Переименуйте его так: .htaccess (заметьте впереди теперь точка, а расширения .txt не должно быть).
Откройте .htaccess файл на редактирование и в самом начале вставьте строки:
RewriteEngine On
RewriteCond %
RewriteRule ^index\.php$ http://VASH_SAIT.RU/ [R=301,L]
Где вместо VASH_SAIT.RU — вставьте домен вашего сайта.
Если говорить кратко, то эта конструкция позволит автоматически переадрисовывать все ссылки с index.php на такие же без index.php. Причем без потери ссылочной массы ссылки, если она ранее была проиндексирована где-угодно. Т.е. если в поисковике (или другом сайте) уже есть ссылка такого вида на ваш ресурс /index.php/o-komanii, то при переходе по ней, пользователь автоматические переадресуется на этот адрес: /o-komanii.
У кого-то данная конструкция может не заработать, поэтому можете попробовать другую (в ней не нужно явно указывать домен сайта):
Источник
Как убрать index.php из URL
Для устранения дублирования с index.php (когда http://ваш_сайт и http://ваш_сайт/index.php ведут на одну страницу) надо удалить один из вариантов. Как правило, надо удалить index.php из URL, то есть чтобы при обращении к http://ваш_сайт/index.php шёл автоматический редирект на http://ваш_сайт. Давайте с Вами это сделаем.
Один из вариантов удаления index.php из адреса — это использовать PHP, но не будем его использовать, так как если у Вас есть Apache (а обычно он и имеется), то лучше использовать mod_rewrite.
Для удаления index.php из URL надо в htaccess написать следующий код:
RewriteEngine On
RewriteRule ^index.php$ / [QSA,R]
После этого, например, такая ссылка http://ваш_сайт/index.php превратится в http://ваш_сайт/, а http://ваш_сайт/index.php?id=5 превратится в http://ваш_сайт/?id=5.
Что касается создания htaccess, то об этом писалось в этой статье: создание htaccess.
Вот так легко можно убрать index.php из URL с помощью htaccess, тем самым, уничтожив дублирование страниц, которое так не любят поисковые системы.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 38 ):
зачем удалять комментарии?
Потому что комментарий «ау» не несёт смысловой нагрузки, и иначе как спамом его не назовёшь. А что касается того вопроса, то он был удалён за этот спам. Такие комментарии допускаются, если спустя сутки я не ответил на вопрос, а через 1 час я не могу отвечать на каждый комментарий, поэтому спамить и засорять сайт не нужно. Если у меня получается ответить в течение 1-го часа — хорошо, но так не всегда, поэтому не надо это требовать и пытаться меня «наказать» флудом.
Никто не пытался наказать, был сильный интерес. Прошу прощения. Так вы ответите?
А зачем удалять ? из URL, тогда страницы просто открываться не будут. Поскольку файла не существует. А если нужно избавиться от вопроса, то достаточно убрать ссылки, чтобы пользователи по ним не переходили, а заменить их на другие, без ?. Всё это ЧПУ называется: http://myrusakov.ru/php-furl.html
Я хочу чтобы было так: /id3242
Вот и делайте такие ссылки, а затем по той статье обрабатывайте их и выводите соответствующие страницы.
Спасибо за понятную и доступную статью! Все прекрасно заработало! Дополнительный вопрос. Для удаления www прописаны строки RewriteEngine On RewriteCond %
http://myrusakov.ru/sajt-www-bez.html — вот здесь точно рабочий код.
Михаил, а если уже есть такой код: RewriteEngine On RewriteCond %
Просто в конец добавить: RewriteRule ^index.php$ / [QSA,R]
У меня не получилось! Не знаю что такое Apache и где его искать. Если выставляю ЧПУ сайт вылетает в ошибку! Если файл htaccess сделаю таковым .htaccess сайт вылетает в ошибку, поэтому он у меня такой htaccess.txt как быть в таком случае? Главное на одном хостинге у меня 2 форума в одном после установки галочки ЧПУ index.php перестал показываться, а на этом форуме ничего не помогает, может кто подскажет в чем проблема?
Есть ещё один метод: RewriteEngine On RewriteCond %
Михаил, а как сделать противоположную задачу, чтобы подставлялось index.php
Добавил данный код. В денвере со всех страниц где есть index.php теперь перекидыват на http://localhost/denwer/ Вопрос а данный способ потходит для такой ситуации http://site/forum/index.php должно остаться http://site/forum/ я правильно понял? а остаеться http://localhost/denwer/ Ура, заработало! ))
Все работает, спасибо Михаилу
RewriteRule ^index.php$ / [QSA,R] У меня почему-то этот код редиректит абсолютно все страницы на главную. Может еще надо было что-то сделать?
Здравствуйте autoevo. Попробуйте так: RewriteCond %
Здравствуйте Александр. К сожалению в таком варианте выдает ошибку 500. У вас есть еще какие ни будь мысли по этому поводу? Был бы очень признателен.
Здравствуйте autoevo. Неверный синтаксис файла .htaccess или наличие в нем не поддерживаемых директив приводит к данной ошибке (500). Удалите старое и попробуйте так: RewriteRule ^index.php\/$ «http\:\/\/test\.com\/» [R=301,L] Только замените на имя адрес Вашего сайта, вместо test.com Второй вариант(более практичный): RewriteCond %
Второй вариант: RewriteCond %
Третий вариант: RewriteEngine on — Внимательно обратите внимание, чтобы был ON. Options +FollowSymLinks — тоже обязательно, для магии:) RewriteBase / -устанавливает базовый URL для преобразований в контексте каталога Сам редирект: RewriteCond %
Доброе утро, autoevo. Ваше сообщение я увидел и вынужден его удалить, т.к оно слишком большое и не несет смысловой нагрузки, больше оно не понадобиться. Я идентифицировал, что Вы используйте CMS Joomla. Первый вариант решения: Включите «Использовать mod_rewrite» в основных настройках.(Перенаправление URL). Но для начала зайдите в htaccess.txt, переименовываем в .htaccess , потом открываем и перед строчкой Options +FollowSymLinks ставим символ #. Если вы все правильно сделаете то у Вас все замечательно будет работать, если же не закоментировать нужную строчку в файле .htaccess то на сайте будет отображаться ошибка 500. Второй вариант решения: Чтобы облегчить Вам решение данной проблемы, предлагаю скачать специальный плагин com_joomsef, найти его и скачать не сложно. Внимательно! Обратите внимание на версию CMS Joomla которую Вы используйте и скачайте для соответствующей версии данный плагин.
Здравствуйте. .htaccess на момент переписки уже был, mod_rewrite включен, SEF включен, плагин sef.php имеется. Как вы рекомендовали, закоменнтировал Options +FollowSymLinks, но похоже изменений нет. Если вписать в урл index.php, то страница отображается и с таким урлом. Что то мне грустно от этой всей истории становится, дубли — это еще не все проблемы.
Значит Вы что-то делаете не так. Утром прочту и посмотрю,что Вам ответить. Технология верна. используйте другие плагины.что мешает?например sh404sef
Приехали. Установил sh404sef, перестали отображаться некоторые категории (404). Появились дубли, например — http://www.autoevo.net/advice продублирован http://www.autoevo.net/index.php/Table/Полезные советы/ но с ошибкой 404. Отключил, очистил кэш — все так и осталось.
Уважаемый,данный вопрос уже не ко мне. Я лишь посоветовал один из плагинов,который использую,если уж у Вас не работают обычные способы. Стоило,видимо,изначально прочесть инструкцию по установке и работе с данным плагином,а не наобум его ставить. Вы ведь даже не удосужились посмотреть быстрые настройки,а также то,что у плагина есть свой ссылочный кеш и его надо очищать,после переходить на индексную страницу,а дальше плагин уж сам. Перед этим стоит сделать нормальные настройки htaccess а в плагине выбрать mod_rewrite Я не заставлял и не принуждал Вас ставить данный плагин
Здравствуйте. Я ни в коей мере не хотел вас упрекнуть. По всей видимости скачанный плагин оказался глючный. Но идея понравилась, будем искать.
Если не найдёте,то пишите. Будем решать как-то. Но тогда придётся показать сайт и рассказать,как конкретно ставили плагин
Здравствуйте. Скачал и установил рабочий плагин через админку. В этот раз поступил благоразумнее — поставил на копию сайта на поддомене. Надо еще разбираться, так как плагин сразу же начинает переписывать по-своему ссылки. По поводу показать сайт, я бы вообще был бы рад если бы кто то позанимался с ним. После обновления движка там куча проблем. Могли бы вы мне в этом помочь?
Здравствуйте autoevo. Используйте документацию, чтобы правильно настроить sh404sef. Если надо, сами поправьте ссылки и желательно скачайте чистый .htaccess для Joomla, заменив на тот, что действителен сейчас.
Источник