Я продолжаю получать ERR_TOO_MANY_REDIRECTS при попытке перейти в магазин внешнего интерфейса сайта Prestashop 1.7. Однако это нормально при переходе к админке.
Любые предложения будут полезны.
Сайт работает с Nginx, PHP-FPM7, MariaDB.
Файл конфигурации Nginx ниже:
upstream examplecoukbackend {
server unix:/var/run/php-fcgi-examplecouk.sock;
}
server {
listen 80;
server_name example.co.uk;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
ssl_session_timeout 24h;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:RSA+3DES:AES128-SHA:!ADH:!AECDH:!MD5;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/letsencrypt/live/example.co.uk/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.co.uk/privkey.pem;
server_name example.co.uk;
root /var/www/vhosts/example.co.uk/htdocs;
access_log /var/www/vhosts/example.co.uk/access.log;
error_log /var/www/vhosts/example.co.uk/error.log;
index index.php index.html;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
auth_basic off;
allow all;
log_not_found off;
access_log off;
}
# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 1;
gzip_buffers 16 8k;
gzip_http_version 1.0;
gzip_types application/json text/css application/javascript;
rewrite ^/[a-zA-Z][a-zA-Z]/(index\.php.*)$ /$1 last; #Remove language code when index.php is called directly
rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$1$2$3.jpg last;
rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last;
rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last;
rewrite ^/c/([0-9]+)(-[.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+.jpg$ /img/c/$1$2$3.jpg last;
rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+.jpg$ /img/c/$1$2.jpg last;
location /admin/ { #Change this to your admin folder
if (!-e $request_filename) {
rewrite ^/.*$ /admin/index.php last; #Change this to your admin folder
}
}
location / {
if (!-e $request_filename) {
rewrite ^/.*$ /index.php last;
}
}
location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(/.*)$;
try_files $uri =404;
fastcgi_keep_conn on;
include /etc/nginx/fastcgi_params;
fastcgi_pass examplecoukbackend; #Change this to your PHP-FPM location
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Файл журнала ниже, обобщенные IP-адреса и доменное имя:
2017/01/08 21:58:00 [уведомление] 21867 # 21867: 1 "^ / ([0-9]) (- [_ a-zA-Z0-9-])? (- [0-9] +)? /.+. Jpg $ "не соответствует" /index.php ", клиент: 0.0.0.0, сервер: example.co.uk, запрос:" GET / index. php HTTP / 1.1 ", хост:" example.co.uk "2017/01/08 21:58:00 [уведомление] 21867 # 21867: 1 "^ / ([0-9]) ([0-9]) (- [_ a-zA-Z0-9-])? (- [0-9] +)? /.+. Jpg $ "не соответствует" /index.php ", клиент: 0.0.0.0, сервер: example.co.uk, запрос:" GET / index. php HTTP / 1.1 ", хост:" example.co.uk "2017/01/08 21:58:00 [уведомление] 21867 # 21867: 1 "^ / ([0-9]) ([0-9]) ([0-9]) (- [_ a-zA-Z0-9-])? (- [0-9] +)? /.+. Jpg $ "не соответствует" /index.php ", клиент: 0.0.0.0, сервер: example.co.uk, запрос:" GET / index. php HTTP / 1.1 ", хост:" example.co.uk "2017/01/08 21:58:00 [уведомление] 21867 # 21867: 1 "^ / ([0-9]) ([0-9]) ([0-9]) ([0-9]) (- [_ a-zA-Z0-9-])? (- [0-9] +)? /.+. Jpg $ "не соответствует" /index.php ", клиент: 0.0.0.0, сервер: example.co.uk, запрос:" GET / index. php HTTP / 1.1 ", хост:" example.co.uk "2017/01/08 21:58:00 [уведомление] 21867 # 21867: 1 "^ / ([0-9]) ([0-9]) ([0-9]) ([0-9]) ([0-9]) (- [_ a-zA-Z0-9- ])? (- [0-9] +)? /.+. Jpg $ "не соответствует" /index.php ", клиент: 0.0.0.0, сервер: example.co.uk, запрос:" GET / index. php HTTP / 1.1 ", хост:" example.co.uk "2017/01/08 21:58:00 [уведомление] 21867 # 21867: 1 "^ / ([0-9]) ([0-9]) ([0-9]) ([0-9]) ([0-9]) ([0-9]) (- [_ a -zA-Z0-9-])? (- [0-9] +)? /.+. Jpg $ "не соответствует" /index.php ", клиент: 0.0.0.0, сервер: example.co.uk, запрос:" GET / index. php HTTP / 1.1 ", хост:" example.co.uk "2017/01/08 21:58:00 [уведомление] 21867 # 21867: 1 "^ / ([0-9]) ([0-9]) ([0-9]) ([0-9]) ([0-9]) ([0-9]) ([0- 9]) (- [_ a-zA-Z0-9-])? (- [0-9] +)? /.+. Jpg $ "не соответствует" /index.php ", клиент: 0.0.0.0, сервер: example.co.uk, запрос:" GET / index. php HTTP / 1.1 ", хост:" example.co.uk "2017/01/08 21:58:00 [уведомление] 21867 # 21867: 1 "^ / ([0-9]) ([0-9]) ([0-9]) ([0-9]) ([0-9]) ([0-9]) ([0- 9]) ([0-9]) (- [_ a-zA-Z0-9-])? (- [0-9] +)? /.+. Jpg $ "не соответствует" /index.php ", клиент: 0.0.0.0, сервер: example.co.uk, запрос:" GET / index. php HTTP / 1.1 ", хост:" example.co.uk "2017/01/08 21:58:00 [уведомление] 21867 # 21867: 1 "^ / c / ([0-9] +) (- [._a-zA-Z0-9 -] *) (- [0-9] +)? /.+. jpg $ "не соответствует" /index.php ", клиент: 0.0.0.0, сервер: example.co. uk, запрос: "GET /index.php HTTP / 1.1", хост: "example.co.uk" 2017/01/08 21:58:00 [уведомление] 21867 # 21867: * 1 "^ / c / ([ a-zA-Z _-] +) (- [0-9] +)? /.+. jpg $ "не соответствует" /index.php ", клиент: 0.0.0.0, сервер: example.co.uk, запрос: «GET /index.php HTTP / 1.1», хост: «example.co.uk»
Одна проблема здесь в этом блоке:
location / {
if (!-e $request_filename) {
rewrite ^/.*$ /index.php last;
}
}
Вместо этого следует использовать это:
try_files $uri $uri/ /index.php;
А затем для вашего админа:
location /admin/ { #Change this to your admin folder
if (!-e $request_filename) {
rewrite ^/.*$ /admin/index.php last; #Change this to your admin folder
}
}
Вы можете использовать это:
location /admin/ {
try_files $uri $uri/ /admin/index.php;
}
Однако эти изменения могут не решить вашу проблему.
если у вас есть эта проблема только в передней части магазина, вам следует перейти к НАСТРОЙКА URL-адресов-> Перенаправить на канонический URL-адрес и установить для него отсутствие перенаправления
Скорее всего Основной URL в Prestashop настроен неправильно.
Из документации:
- Основной URL. Включив это, вы указываете, что хотите, чтобы все остальные URL-адреса этого магазина перенаправлялись на этот основной URL-адрес.
Если вы настроите http://example.com
в Prestashop, но настройте nginx для перенаправления всех HTTP-запросов на HTTPS, вы получите такой цикл перенаправления.
Убедитесь, что вы настроили основной URL-адрес в Prestashop на URL-адрес, на который ваш httpd перенаправляет.
У меня такая же проблема, когда я перемещаю свой prestashop из местного в онлайн. Решил удалить. Все содержимое файла .htaccess. Я думаю, проблема возникает из-за конфликтов между правилами перезаписи в конфигурации .htaccess и nginx.
Я использую этот nginx.conf https://github.com/PrestaShop/docs/blob/master/nginx.rst и удалите содержимое .htaccess. Ошибка HTTP 301 просто исчезла.