web-dev-qa-db-fra.com

Rediriger http vers https avec nginx et réécrire une règle donne une boucle de redirection

Je veux rediriger http vers https avec

rewrite ^(.*)$ /$1.php;

Mon fichier virtualhost nginx:

server {
   listen         80;
   server_name    domain.com;
   return         301 https://$server_name$request_uri;
}

server {
   listen         443 ssl;
   server_name    domain.com;
   root /var/nginx/html;

   ssl_certificate /home/domain.crt
   ssl_certificate_key /home/domain.key

   location / {
            if (!-e $request_filename){
                    rewrite ^(.*)$ /$1.php;
            }
            try_files $uri $uri/ /index.html;
   }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
          root /usr/share/nginx/www;
    }

    # pass the PHP scripts to FastCGI server listening on /var/run/php5-fpm$
    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_nam$
            include fastcgi_params;

    }

}

… Mais cela me donne une boucle de redirection. Quelqu'un peut-il m'indiquer ce que je fais mal?

2
Deep S.
if (!-e $request_filename){
    rewrite ^(.*)$ /$1.php;
}
try_files $uri $uri/ /index.html;

Que se passe-t-il si /$1.php n'existe pas non plus? Malheureusement, je ne suis pas un expert sur Nginx, mais sur Apache, ce type de réécriture peut entraîner une boucle de réécriture (vous devez vérifier que le fichier existe avant de le réécrire).

Ceci ne devrait-il pas être réécrit avec try_files seulement ...? Par exemple:

try_files $uri $url.php $uri/ /index.html;
1
MrWhite