2 votes

Prestashop 1.7 : trop de redirections sur la boutique frontale

Je continue à obtenir ERR_TOO_MANY_REDIRECTS lorsque j'essaie de naviguer vers la boutique frontale d'un site Prestashop 1.7. Cependant, tout va bien lorsqu'on se rend dans le backend d'administration.

Toute suggestion serait utile.

Le site fonctionne avec Nginx, PHP-FPM7, MariaDB.

Le fichier de configuration de Nginx ci-dessous :

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;
    }
}

Fichier journal ci-dessous, IPs et nom de domaine généralisés :

2017/01/08 21:58:00 [notice] 21867#21867 : 1 "^/([0-9])(-[_a-zA-Z0-9-]) ) ?(-[0-9]+)?/.+.jpg$" ne correspond pas à "/index.php", client : 0.0.0.0, serveur : exemple.co.uk, requête : "GET /index.php HTTP/1.1", hôte : "exemple.fr". 2017/01/08 21:58:00 [notice] 21867#21867 : 1 "^/([0-9])([0-9])(-[_a-zA-Z0-9-] ) ?(-[0-9]+)?/.+.jpg$" ne correspond pas à "/index.php", client : 0.0.0.0, serveur : exemple.co.uk, requête : "GET /index.php HTTP/1.1", hôte : "exemple.fr". 2017/01/08 21:58:00 [notice] 21867#21867 : 1 "^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-] ) ?(-[0-9]+)?/.+.jpg$" ne correspond pas à "/index.php", client : 0.0.0.0, serveur : example.co.uk, requête : "GET /index.php HTTP/1.1", hôte : "exemple.fr". 2017/01/08 21:58:00 [notice] 21867#21867 : 1 "^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-] ) ?(-[0-9]+)?/.+.jpg$" ne correspond pas à "/index.php", client : 0.0.0.0, serveur : example.co.uk, requête : "GET /index.php HTTP/1.1", hôte : "exemple.fr". 2017/01/08 21:58:00 [notice] 21867#21867 : 1 "^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-] ) ?(-[0-9]+)?/.+.jpg$" ne correspond pas à "/index.php", client : 0.0.0.0, serveur : example.co.uk, requête : "GET /index.php HTTP/1.1", hôte : "exemple.fr". 2017/01/08 21:58:00 [notice] 21867#21867 : 1 "^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-] ) ?(-[0-9]+)?/.+.jpg$" ne correspond pas à "/index.php", client : 0.0.0.0, serveur : exemple.co.uk, requête : "GET /index.php HTTP/1.1", hôte : "exemple.fr". 2017/01/08 21:58:00 [notice] 21867#21867 : 1 "^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-] ) ?(-[0-9]+)?/.+.jpg$" ne correspond pas à "/index.php", client : 0.0.0.0, serveur : example.co.uk, requête : "GET /index.php HTTP/1.1", hôte : "exemple.fr". 2017/01/08 21:58:00 [notice] 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$" ne correspond pas à "/index.php", client : 0.0.0.0, serveur : example.co.uk, requête : "GET /index.php HTTP/1.1", hôte : "exemple.fr". 2017/01/08 21:58:00 [notice] 21867#21867 : 1 "^/c/([0-9]+)(-[. _a-zA-Z0-9-]*)(-[0-9]+)?/.+.jpg$" ne correspond pas à "/index.php", client : 0.0.0.0, serveur : example.co.uk, requête : "GET /index.php HTTP/1.1", hôte : "exemple.fr". 2017/01/08 21:58:00 [notice] 21867#21867 : *1 "^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+.jpg$" ne correspond pas à "/index.php", client : 0.0.0.0, serveur : example.co.uk, requête : "GET /index.php HTTP/1.1", hôte : "exemple.fr".

0 votes

Qui a écrit cette configuration ? C'est assez bizarre. On dirait que quelqu'un qui n'a aucune expérience avec nginx l'a écrite. Est-ce ce que prestashop a recommandé ?

0 votes

C'est sur plusieurs sites différents, prestashop n'a pas encore publié la mise à jour de la configuration pour la 1.7, d'après ce qu'il semble, le bit de réécriture était de la configuration 1.6.

0 votes

C'est vraiment effrayant.

2voto

Tero Kilkanen Points 32968

Un problème ici est ce bloc :

location / {
    if (!-e $request_filename) {
        rewrite ^/.*$ /index.php last;
    }
}

On devrait utiliser ceci à la place :

try_files $uri $uri/ /index.php;

Et puis pour votre administration :

location /admin/ {                           #Change this to your admin folder
    if (!-e $request_filename) {
        rewrite ^/.*$ /admin/index.php last; #Change this to your admin folder
    }
}

Vous pouvez utiliser ceci :

location /admin/ {
    try_files $uri $uri/ /admin/index.php;
}

Toutefois, ces changements ne résoudront peut-être pas votre problème.

0 votes

Je vais essayer. Savez-vous si la grande liste de réécritures pourrait causer un problème ?

0 votes

Cela ne résout pas les problèmes, malheureusement.

0voto

Gerald Schneider Points 17588

Très probablement le URL principale dans Prestashop est mal configuré.

Dans la documentation :

  • URL principal . En activant cette option, vous indiquez que vous souhaitez que toutes les autres URL de cette boutique redirigent vers cette URL principale.

Si vous configurez http://example.com dans Prestashop, mais configurez nginx pour rediriger toutes les demandes HTTP vers HTTPS, vous obtiendrez une telle boucle de redirection.

Assurez-vous que vous configurez l'URL principale dans Prestashop à l'URL où votre httpd redirige.

0voto

Watch Hax Points 1

Si vous avez ce problème uniquement à l'avant du magasin, alors vous devriez aller à CONFIGURER LES URL->Rediriger vers l'URL canonique et définir l'absence de redirection.

-1voto

J'ai le même problème lorsque je déplace mon prestashop de local à en ligne. J'ai résolu la suppression. Tout le contenu du fichier .htaccess. Je pense que le problème est dû à des conflits entre les règles de réécriture dans un .htaccess et nginx config.

J'utilise ce nginx.conf https://github.com/PrestaShop/docs/blob/master/nginx.rst et supprimer le contenu du .htaccess. L'erreur 301 HTTP vient de disparaître.

0 votes

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X