Избавляемся от index.php в адресной строке и дублей контента в Joomla!

Избавляемся от index.php в адресной строке и дублей контента в Joomla!

04.04.2013

В сети встречается довольно много ресурсов использующих систему Joomla! Но многие из веб-мастеров даже не догадываются о существовании такого недочета как дублирование контента из-за неправильной работы стандартного SEF модуля системы.

Если вас интересует как закрыть от индексации дублирующие страницы с index.php в адресе, например: http://site.ru/catalog/ и http://site.ru/catalog/index.php, то достаточно прописать правило в файле robots.txt

Disallow: */index.php

Далее речь идет о том, когда в адресную строку мы вводим /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.

RewriteCond %{THE_REQUEST} /index.php #если строка содержит index.php
RewriteRule (.*)$ http://site.ru/ [R=301,L] # 301 редирект на главную

Вот так все не весело получается, НО! Во-первых мы избавились от дублей, во-вторых теперь у нас появился большой гемор, а заключается он в том, что Joomla! написана так что большинство модулей как стандартных, так и сторонних перестают работать.

В частности у меня перестал работать Virtuemart и модуль стандартной авторизации. Лечиться это в принципе не сложно, но долго.

Чтобы вновь заработал стандартный модуль авторизации в Joomla! необходимо найти компонент com_users и во всех файлах, где есть ссылка на «index.php» заменить ее на «/» . И тоже самое проделать с модулем mod_login.

Virtuemart вылечился точно также и прекрасно работает (только ссылку я убрал не во всех файлах а лишь там где возникали ошибки). И еще была замечена проблема при использовании в Virtuemart суперглобальной переменной $SERVER["PHP_SELF"], заменил на REQUEST.

Теперь выкладываю листинг файла .htaccess, по моему мнению таким он должен быть для Joomla:

##
# @package Joomla
# @copyright Copyright (C) 2005 - 2012 Open Source Matters. All rights reserved.
# @license GNU General Public License version 2 or later; see LICENSE.txt
##
 
##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# The line just below this section: 'Options +FollowSymLinks' may cause problems
# with some server configurations. It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file. If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url's. If they work,
# it has been set by your server administrator and you do not need it set here.
##
 
## Can be commented out if causes errors, see notes above.
Options +FollowSymLinks
 
## Mod_rewrite in use.
 
RewriteEngine On
 
## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*([^)]*) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.
 
## Begin - Custom redirects
#
RewriteCond %{HTTP_HOST} ^site.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L] #редирект на основное зеркало с www
## End - Custom redirects
 
##
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root).
##
 
#RewriteBase /
 
## Begin - Joomla! core SEF Section.
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index.php
# and the request is for something within the component folder,
# or for the site root, or for an extensionless URL, or the
# requested URL ends with one of the listed extensions
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|.(php|html?|feed|pdf|vcf|raw))$ [NC]
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End - Joomla! core SEF Section.
 
RewriteCond %{THE_REQUEST} /index.php
RewriteRule (.*)$ http://www.site.ru/ [R=301,L]

После отредактированного таким образом файла .htaccess вы не сможете войти в админку, чтобы исправить недочет нужно положить файл .htaccess в директорию /administrator/, но в файле не должно быть последних двух строк с редиректом и будет Вам счастье.

Если есть дополнения или замечанию, пожалуйста комментируйте.


Узнал сам - поделись с друзьями!

Возврат к списку