Файл .htaccess для магазина OpenCart 2+
- Stats: 1462 1
- Author: admin
- Category: CMS Opencart
- Comments: Комментариев нет
Поскольку файл .htaccess имеет важное значение в работе всего интернет-магазина, рассмотрим его подробно, что же он в себя включает по-умолчанию. Тем более, что «с коробки» он содержит в себе много лишнего. Заодно пройдемся по основным директивам данного файла.
Файл имеет много комментариев, я буду расписывать только работающие строки.
Options +FollowSymlinks
Позволяет отдавать файлы, которые физически находятся за пределами root директории, но на которые есть ярлыки (symbolic link). Нужно для работы mod_rewrite
Options -Indexes
Запрет выдачи листинга пустого каталога. То есть в каталоге, где отсутствует файл показываемый по-умолчанию (например index.html) не будет отображаться содержимое со списком файлов. Посетитель получит HTTP ошибку 403 — access forbidden.
<FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))">
Require all denied
</FilesMatch>
Предотвращение прямого доступа к файлам с указанными расширениями, кроме robots.txt. Тут же закомментировано сообщение:
«Для apache 2.2 и старее замените «Require all denied» этими двумя строками:»
# Order deny,allow
# Deny from all
Если у apache вас 2.4+ — оставляем как есть.
Можно заменить на
<FilesMatch "\.(tpl|ini|log|txt)">
Order deny,allow
Deny from all
</FilesMatch>
<Files robots.txt>
Allow from all
</Files>
Блок mod_rewrite.
RewriteEngine On
Включение модуля mod_rewrite для модификации URL.
RewriteBase /
Область преобразования. В данном случае весь сайт. Можно ограничить какой-либо директорией, например: RewriteBase /dir
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
При вызове карты сайта для поисковиков по ссылке site.com/sitemap.xml переадресовать на site.com/index.php?route=extension/feed/google_sitemap
то есть на контроллер из файла catalog\controller\extension\feed\google_sitemap.php
который генерирует карту.
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
Предполагалось, что по ссылке site.com/googlebase.xml будет переадресация на site.com/index.php?route=extension/feed/google_base, то есть вызываться контроллер из файла catalog\controller\extension\feed\google_base.php Данный контроллер должен работать с базой данных Google, которая уже не актуальна.
Данное правило можно удалить.
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
При попытке получения содержимого папки system/download по ссылке site.com/system/download/… переадресовывать на
site.com/index.php?route=error/not_found
где вызывается метод index контроллера catalog\controller\error\not_found.php
выводящий сообщение «страница не найдена».
В OpenCart 2.3 (может и в более ранних версиях) папки download в system нет, поэтому данное правило можно удалить. К тому же, в папке system есть свой файл .htaccess ограничивающий доступ к ее содержимому.
Если предыдущие регулярные выражения из директив RewriteRule не подошли, выполнение идет дальше.
RewriteCond %{REQUEST_FILENAME} !-f
Если файл, указанный в запросе не существует
А файл обычно index.php. Если в строке он отсутствует, тогда проверка продолжается и может выполниться строка с директивой RewriteRule.
Если index.php присутствует, то проверка не прошла, директива RewriteRule не выполнится, а файл index.php в итоге и загрузится со всеми get-параметрами (если есть).
RewriteCond %{REQUEST_FILENAME} !-d
Если запрашиваемый каталог (папка) не существует
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
Если запрашивается не файл с одним из указанных расширений
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
тогда любой запрос переадресовывается на
site.com/index.php?_route_
[после параметра _route_ подставляется то, что запрашивалось – любая строка указанная в URL после домена]
GET-параметры, с помощью регулярного выражения, подставляются в строке вместо «$1»
Данная директива выполнится, если в URL не был указан файл index.php, что происходит в т.ч. при включении ЧПУ URL.
В процессе загрузки приложения, проверяется, было ли включено ЧПУ в настройках. Если нет, то при получении параметра _route_ осуществится вызов контроллера 'common/home', который выведет домашнюю (главную) страницу. Если же ЧПУ было включено, выполняется контроллер ControllerStartupSeoPro
из файла catalog\controller\startup\seo_pro.php
или другой выбранный, где параметр _route_ будет разобран на части и из таблицы базы данных url_alias по переданным в GET-запросе элементам найдены алиасы, которые укажут скрипту путь к контроллеру/методу, который необходимо вызвать для вывода страницы.
Далее идут дополнительные настройки, которые могут понадобиться в специфичных ситуациях.
Последним блоком идет показ ошибок и предупреждений. Для процесса разработки магазина, можно раскомментировать строки:
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag track_errors on
#показывать все ошибки для PHP 5.4.x, 5.6.x
php_value error_reporting 32767
Итого настройки файла .htaccess для OpenCart 2+ без лишних комментариев и с учетом того, о чем я писал выше:
Options +FollowSymlinks
Options -Indexes
##Запрещаем доступ к файлам указанных расширений
<FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))">
Require all denied
</FilesMatch>
##Переопределяем URL с помощью mod_rewrite
RewriteEngine On
RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
##Показываем все ошибки и предупреждения при разработке магазина.
##Потом закомментировать
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag track_errors on
#показывать все ошибки для PHP 5.4.x, 5.6.x
php_value error_reporting 32767
Отправить ответ