Файл имеет много комментариев, я буду расписывать только работающие строки.
1.
Options +FollowSymlinksПозволяет отдавать файлы, которые физически находятся за пределами root директории, но на которые есть ярлыки (symbolic link). Нужно для работы mod_rewrite
2.
Options –IndexesЗапрет выдачи листинга пустого каталога. То есть в каталоге, где отсутствует файл показываемый по-умолчанию (например index.html) не будет отображаться содержимое со списком файлов. Посетитель получит HTTP ошибку
403 — access forbidden
.3.
<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.
4.
RewriteEngine OnВключение модуля mod_rewrite для модификации URL.
5.
RewriteBase /Область преобразования. В данном случае весь сайт. Можно ограничить какой-либо директорией, например: RewriteBase /dir
6.
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 который генерирует карту.
7.
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, которая уже не актуальна.
Данное правило можно удалить.
8.
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 не подошли, выполнение идет дальше.
9.
RewriteCond %{REQUEST_FILENAME} !-fЕсли файл, указанный в запросе не существует
А файл обычно index.php. Если в строке он отсутствует, тогда проверка продолжается и может выполниться строка с директивой RewriteRule.
Если index.php присутствует, то проверка не прошла, директива RewriteRule не выполнится, а файл index.php в итоге и загрузится со всеми get-параметрами (если есть).
10.
RewriteCond %{REQUEST_FILENAME} !-dЕсли запрашиваемый каталог (папка) не существует
11.
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)Если запрашивается не файл с одним из указанных расширений
12.
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-запросе элементам найдены алиасы, которые укажут скрипту путь к контроллеру/методу, который необходимо вызвать для вывода страницы.
Далее идут дополнительные настройки, которые могут понадобиться в специфичных ситуациях.
13.
Последним блоком идет показ ошибок и предупреждений. Для процесса разработки магазина, можно раскомментировать строки: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