Содержание
Настройка правильного файла htaccess в Opencart
Файл .htaccess имеет важное значение в работе всего интернет-магазина, рассмотрим его подробно, что же он в себя включает по-умолчанию. Тем более, что «с коробки» он содержит в себе много лишнего. Заодно пройдемся по основным директивам данного файла. Файл имеет много комментариев, я буду расписывать только работающие строки.
Из коробки .htaccess в Opencart имеет в себя большое количество бесполезного кода. В первую очередь пройдемся по главным директивам и настройкам файла. Стандартный .htaccess для opencart содержит большое количество объяснений, я буду расписывать лишь только работающие строчки.
Options +FollowSymlinks
Позволяет отдавать файлы, которые физически находятся за пределами root директории, но на которые есть ярлыки (symbolic link). Нужно для работы mod_rewrite
Options –Indexes
Запрет выдачи листинга пустого каталога. В каталоге, в котором отсутствует файл показываемый по-умолчанию (например, index. html) не будет отображаться содержимое со списком файлов. Посетитель получит HTTP ошибку 403 — access forbidden.
<FilesMatch "(?i)((\.tpl|.twig|\.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 для модификации SEO URL.
RewriteBase /
Область преобразования. В этом случае весь магазин. Можно ограничить директорией, если ваш сайт инсталлирован в директории, например: RewriteBase /shop
RewriteRule ^sitemap. system/storage/(.*) index.php?route=error/not_found [L]
При попытке получить содержимого папки system/download по ссылке site.com/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 нет, поэтому данное правило можно удалить из .htaccess. К тому же, в папке system есть свой файл .htaccess ограничивающий доступ к ее содержимому.
Если предыдущие регулярные выражения из директив RewriteRule не подошли, выполнение идет дальше.
RewriteCond %{REQUEST_FILENAME} !-f
Если файл, указанный в запросе не существует, тогда проверка продолжается и может выполниться строка с директивой RewriteRule.
Если index.php присутствует, то проверка не прошла, директива RewriteRule не выполнится, а файл index.php в итоге и загрузится со всеми get-параметрами (если есть). ?]*) 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-запросе элементам найдены алиасы, которые укажут скрипту путь к контроллеру/методу, который необходимо вызвать для вывода страницы.
Далее идут дополнительные настройки, которые могут понадобиться в специфичных ситуациях.
Итого настройки файла .htaccess для Opencart 2+ с комментариями:
# 1. Чтобы использовать URL Alias, вам нужно запустить apache с включенным mod_rewrite. # 2. В вашем каталоге opencart переименуйте htaccess.txt в .htaccess. # По любым вопросам поддержки, пожалуйста, посетите: https://www.opencart.com/ Options +FollowSymlinks # Запрет выдачи листинга пустого каталога Options -Indexes # Запретить прямой доступ к файлам <FilesMatch "(?i)((\.tpl|.twig|\.ini|\.log|(?<!robots)\.txt))"> Require all denied ## For apache 2.2 and older, replace "Require all denied" with these two lines : # Order deny,allow # Deny from all </FilesMatch> # Настройки SEO URL RewriteEngine On RewriteBase / # Если ваша установка opencart инсталлируется не в главной директории, убедитесь, что в вашей папке она работает, т. ?]*) index.php?_route_=$1 [L,QSA] ### Дополнительные настройки, которые могут потребоваться для некоторых серверов ### Раскомментируйте команды, удалив знак # перед ним. ### Если вы получили «Внутреннюю ошибку сервера 500» после включения любой из следующих настроек, восстановите #, так как это означает, что ваш хост не поддерживает директиву. # 1. Если ваша корзина позволяет вам добавлять только один элемент за раз, возможно, что register_globals включен. Эта директива поможет его: # php_flag register_globals off # 2. Если в вашей корзине включены магические кавычки, это может помочь отключить их: # php_flag magic_quotes_gpc Off # 3. Установите максимальный размер загружаемого файла. Большинство хостов ограничивают это и не позволяют переопределить его, но вы можете попробовать # php_value upload_max_filesize 999M # 4. Установите максимальный размер отправляемых данных. Раскомментируйте эту строку, если вы получаете ошибки, когда формы не сохраняют все поля # php_value post_max_size 999M # 5. Установите какое максимальное время может занять сценарий. Раскомментируйте эту строку, если у вас много товаров или вы получаете ошибки, когда формы не сохраняют все поля # php_value max_execution_time 200 # 6. Установите максимальное время для получения ввода. Раскомментируйте эту строку, если у вас много товаров или вы получаете ошибки, когда формы не сохраняют все поля # php_value max_input_time 200 # 7. Отключить ограничения open_basedir # php_admin_value open_basedir none
ПОЛУЧИТЬ.*index\.php [NC]
RewriteCond %{REQUEST_URI} !/system/.* [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
После добавления
# 1. Чтобы использовать псевдоним URL, вам необходимо запустить apache с включенным mod_rewrite . # 2. В вашем каталоге opencart переименуйте htaccess.txt в .htaccess. # По любым вопросам поддержки, пожалуйста, посетите: http://www.opencart.com Опции +FollowSymlinks # Предотвратить листинг Directoy Параметры - Индексы # Запретить прямой доступ к файламGET.*index\.php [NC] RewriteCond %{REQUEST_URI} !/system/.* [NC] RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L] ### Дополнительные настройки, которые могут потребоваться для некоторых серверов ### Раскомментируйте команды, удалив перед ними знак #. ### Если после включения любого из следующие настройки, восстановите #, так как это означает, что ваш хост не разрешает это. # 1. Если ваша корзина позволяет добавлять только один товар за раз, это возможно register_globals включен. Это может помочь отключить его: # php_flag register_globals выключен # 2. Если в вашей корзине включены волшебные кавычки, это может сработать, чтобы отключить их: # php_flag magic_quotes_gpc Выкл. # 3. Установите максимальный размер загружаемого файла. Большинство хостов ограничат это и не позволят быть переопределен, но вы можете попробовать # php_value upload_max_filesize 999М # 4. Установите максимальный размер сообщения. раскомментируйте эту строку, если у вас много товара варианты или получают ошибки, когда формы не сохраняют все поля # php_value post_max_size 999M # 5. Установите максимальное время, которое может занять скрипт. раскомментируйте эту строку, если у вас много параметры продукта или возникают ошибки, когда формы не сохраняют все поля # php_value max_execution_time 200 # 6. установить максимальное время для получения ввода. Раскомментируйте эту строку, если у вас есть много вариантов продукта или возникают ошибки, когда формы не сохраняют все поля # php_value max_input_time 200
Предыдущий пост
обычная домашняя переадресация / в opencart
Следующий пост
Лучшее значение htaccess для opencart
php — Правило перезаписи для nginx (Opencart)
Задавать вопрос
спросил
Изменено
2 месяца назад
Просмотрено
5к раз
Opencart имеет следующую структуру URL:
http://example. com/index.php?route=common/home http://example.com/index.php?route=account/register http://example.com/index.php?route=checkout/cart http://example.com/index.php?route=checkout/checkout
… и я хочу избавиться от строки из 9(\..*|Записи.*|Репозиторий|Корень|Тег|Шаблон)$|\.php_ {
отрицать все;
}
местоположение ~ /\.ht {
отрицать все;
}
местоположение/изображение/данные {
включен автоиндекс;
}
местоположение = /favicon.ico {
log_not_found выключен;
доступ_лог выключен;
}
местоположение = /robots.txt {
позволять все;
log_not_found выключен;
доступ_лог выключен;
}
расположение ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
истекает макс.;
доступ_лог выключен;
}
- nginx
- php
- переписать
URL-адреса на веб-страницах, которые вы получаете от OpenCart, генерируются программным обеспечением OpenCart. Вам нужно найти дружественные URL-адреса в его конфигурации и включить их.
Затем вы можете применить соответствующие правила перезаписи
в nginx, чтобы входящие запросы правильно направлялись в OpenCart.
2
Правила перезаписи могут переводить маршруты во входящих запросах из хорошей версии в версию с соответствующим заклинанием на основе index.php, но похоже, что это вопрос о сгенерированном HTML, отправленном в ответах, который все еще создается с помощью индекса. заклинание php? Чтобы изменить маршруты на основе index.php в ответах, отправляемых в браузер, попробуйте nginx ‘ ngx_http_sub_module:
http://nginx.org/en/docs/http/ngx_http_sub_module.html
Что-то вроде:
sub_filter '/index.php?route=' ''; sub_filter_once включен;
в сочетании с перезаписью может быть достаточно.
2
Директива try_files
должна выполнять большую часть работы. У меня не установлен OpenCart, поэтому следующее не тестировалось. Хотя это может быть хорошей отправной точкой. Переменная $uri
будет включать начальный /
, что исключено правилами . htaccess, которые я видел. Если это проблема, ее можно исключить, немного поработав.
местоположение = /sitemap.xml { try_files /index.php?route=feed/google_sitemap =404; } местоположение = /googlebase.xml { try_files /index.php?route=feed/google_base =404; } try_files $uri $uri/ /index.php?_route_=$uri;
5
Хорошо ли выглядит следующее? 9(?i)/index.php$ $_dest? последний;
}
}
Это может работать, а может и не работать, в зависимости от того, насколько «умным» считает ваш вышестоящий Opencart.
Идея состоит в том, чтобы согласно https://stackoverflow.com/questions/21687288/nginx-redirect-loop-remove-index-php-from-url/21813759#21813759 выдавать перенаправления, только если index.php
появляется в исходном запросе от пользователя (в $request_uri
), но не в том случае, если он просто присутствует как часть внутренней маршрутизации (в $uri
).