Файл .htaccess для магазина OpenCart 2+

Файл .htaccess для магазина OpenCart 2+

Поскольку файл .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

Источник

Отправить ответ

Please Login to comment
Войти с помощью: 
  Subscribe  
Notify of
Authorization
*
*
Войти с помощью: 
Registration
*
*
*
Войти с помощью: 

19 − 18 =

Password generation