Index php route opencart: .htaccess — Remove index.php?route= from OpenCart

Настройка правильного файла 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 ).