В сети встречается довольно много ресурсов использующих систему 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.
Объясню в двух словах:
1) Для начала, чтобы использовать ЧПУ на своем сайте, работающем на Joomla! Вам нужно в настройках системы включить SEF, у меня это находится в разделе Установки Search Engine Optimization. Теперь вы можете оценить всю красоту ваших урлов на сайте, кстати без использования mod_rewrite во всех адресах прописан index.php, чтобы скрыть его из адреса страницы достаточно включить опцию Использовать mod_rewrite. Суффикс URL на Вашей совести (добавляет к адресу страницы .html на конце).
2) Вот и посыпались ошибки, потому как необходимо! переименовать htaccess.txt в .htaccess (обратите особое внимание на точку). Вот и все, теперь мы можем любоваться красивыми адресами страниц.
Вроде бы с настройками все ясно и все отлично работает НО! описанная мной в начале статьи проблема не устранена! 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/, но в файле не должно быть последних двух строк с редиректом и будет Вам счастье.
Если есть дополнения или замечанию, пожалуйста комментируйте.