NGINX : PB DOWNLOAD FICHIER EN ENLEVANT SEULEMENT l'EXTENSION DU FICHIER (exemple .PHP)

Bonjour à tous !

Alors voilà je suis confronté à un petit problème assez génant.
J'ai créé un site internet hébergé sur un serveur Debian comportant Nginx. J'ai nottament fait de la réécriture d'URL et le PHP fonctionne bien.

Mon problème est que lorsque j'enlève le suffixe du .php à mon URL, il veut télécharger la page en PHP...
J'ai essayé de prendre l'exemple de ce code suivant :

 location ~/\. {
                deny all;
                access_log off;
                log_not_found off;
        }

Auriez-vous une solution pou confronter ce problème ?
Un grand merci ! :)

66 réponses


Huggy
Réponse acceptée

Il faut voir comment est appelée la socket php et où
tu devrais normalement avoir qques choses qui se base sur l'extension .php

 location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass   unix:/run/php/php7.0-fpm.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_n$
                include /etc/nginx/fastcgi_params;
   }
Huggy
Réponse acceptée

Je viens de reproduire le phenomène et j'avoue m'être fait avoir par ce fameux try_files
Il faut comprendre que tous les paramètres sauf le dernier sont testés en tant que fichier à renvoyer comme réponse
et même si c'est un fichier php il sera renvoyé tel quel en réponse !!!

voici ce qui ne marche pas

try_files $uri $uri/  /$uri.php /index.php ;

la différence entre /$uri.php et /index.php c'est que le /$uri.php sera renvoyé tel-quel
tandis que /index.php (en dernière position) sera considéré comme une uri à re-traiter
dans ce cas la location .php le prendra en charge et le transmettrera à l'interpréteur php

m.daveur
Auteur
Réponse acceptée

La solution :

try_files $uri $uri/  /$uri.php /index.php ;

Merci ;)

Il ne sait plus quel est le type mime du fichier si tu enlèves l'extension... Pk tu veux enlever l'extension, en fait..?? C'est surtout ça la grande question :-s

m.daveur
Auteur

Nan c'est pas ça ! En gros je veut afficher simplement une page php avec "mapage.php" par exemple et le php fonctionne correctement. Jusque la OK. Mais c'est quand je saisie dans l'URL "mapage" il me le télécharge... Je souhaiterais que quand j'enlève le suffixe .php il m'affiche seulement une erreur :)

m.daveur
Auteur

Je possède bien cette structure...
Cela ne résout pas mon problème :/

m.daveur
Auteur

Ca download le fichier sans extension...

Donc faudrait que tu nous envoies le "nginx.conf" en entier ;-) Doit y avoir un comportement "par défaut", définit plus proche de la racine de ton fichier, qui provoque ça...

m.daveur
Auteur

Merci ! Le voici :

user  www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    # limit_req_zone key zone=name:size rate=rate;
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";

    # limit the number of connections per single IP
    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;

    # limit the number of requests for a given session
    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;

    # zone which we want to limit by upper values, we want limit whole server
    server {
        limit_conn conn_limit_per_ip 10;
        limit_req zone=req_limit_per_ip burst=10 nodelay;
        limit_req zone=one burst=5;
    }

    # if the request body size is more than the buffer size, then the entire (or partial)
    # request body is written into a temporary file
    client_body_buffer_size  128k;

    # headerbuffer size for the request header from client -- for testing environment
    client_header_buffer_size 3m;

    # maximum number and size of buffers for large headers to read from client request
    large_client_header_buffers 4 256k;

    # read timeout for the request body from client -- for testing environment
    client_body_timeout   3m;

    # how long to wait for the client to send a request header -- for testing environment
    client_header_timeout 3m;

    # BREACH protection
    ## Disable of SSL compression
    gzip off;

    include       /etc/nginx/mime.types;
    server_tokens off;
    client_max_body_size 20000m;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/website.conf;
}

Ok, et ton website.conf?

Bonjour,

Ça vient sûrement de ta manière de faire ta réécriture, est-ce que tu pourrais aussi nous montrer cette partie

m.daveur
Auteur

Je vous montre tout !

server {

        listen      80;
        server_name     www.website.fr 192.168.0.47;

        root /home/dev/www/public_html;
        index index.html index.php;
    server_tokens off;

    location ~/.well-known {
        allow all;
    }

    location ~/cloud {
        allow all;
    }   

     location ~ \.wav$ {
        add_header Content-Disposition "inline";
        }   

    # nginx configuration

    location /cloud/ {
    autoindex off;
    if (!-e $request_filename){
        rewrite ^/cloud/(.*)$ /cloud/index.php break;
    }
}

     location /db55-manager {

                # Option: cela permet de séparer les log de phpmyadmin des autres
                access_log /home/dev/www/.logs/phpmyadmin_access.log;
                error_log /home/dev/www/.logs/phpmyadmin_error.log;

                index index.php index.html index.htm;

                # Interdiction de certains fichier sensibles.
                location ~ ^/db55-manager/(README|LICENSE|ChangeLog|DCO)$ {
                        deny all;
                }
                # Interdiction des fichiers .md
                location ~ ^/db55-manager/(.+\.md)$ {
                        deny all;
                }
                # interdiction de certains répertoires sensibles.
                location ~ ^/db55-manager/(doc|sql|setup)/ {
                        deny all;
                }

                #configuration de fastCGI pour PhpMyAdmin
                location ~ ^/db55-manager/(.+\.php)$ {
                        try_files $uri =404;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        fastcgi_pass    unix:/var/run/php/php7.0-fpm.sock;
                        fastcgi_index  index.php;
                        include        fastcgi_params;
                        }

        auth_basic "Pour continuer, merci de vous authentifier sur nos serveurs !";
                auth_basic_user_file /etc/nginx/pma_password;
        }   

    location /projects/browse {
                auth_basic "Pour continuer, merci de vous authentifier sur nos serveurs.";
                auth_basic_user_file /etc/nginx/pswd_projects_website;
    }

        error_log /home/dev/www/.logs/error_log;
        access_log /home/dev/www/.logs/access_log;

    # nginx configuration

    location / {
        if ($http_host ~ "^website.fr$"){
            rewrite ^/(.*) https://www.website.fr/$1 redirect;
        }
        if ($http_host ~ "//website.fr$"){
                rewrite ^/(.*) https://www.website.fr/$1 redirect;
                }
        if ($http_host ~ "^www.website.fr$"){
        rewrite ^/(.*) https://www.website.fr/$1 redirect;
        }
        if ($http_host ~ "^85.169.121.91$"){
            rewrite ^/(.*) https://www.website.fr/$1 redirect;
        }
         if ($http_host ~ "^website.tk$"){
                rewrite ^/(.*) https://www.website.fr/$1 redirect;
                }

    try_files $uri $uri/ $uri.html $uri.php $uri.wav =404;
        autoindex on;
    }

    location /cloud {
        autoindex off;
        try_files $uri $uri/ $uri.html $uri.php;
    }

    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    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_name;
        include fastcgi_params;
        limit_req zone=one burst=5;
    }

    location ~* \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }

    error_page 404 /404.html;
}

server {
        listen 80;
        server_name 85.169.121.91;
        return 301 https://www.website.fr$request_uri;
}

server {    
    listen 80;
    server_name website.tk;
    return 301 https://www.website.fr$request_uri;
}

server {
    listen 80;
    server_name website.fr;
    return 301 https://www.website.fr$request_uri;
}
server {
    listen 443 ssl;
    server_name website.fr;
    root /home/dev/www/public_html;
    index index.html index.php;

    if ($host = 'https://website.fr' ) {
         rewrite  ^/(.*)$  https://www.website.fr/$1  permanent;
      }

    location / {
        try_files $uri $uri/ $uri.html $uri.php $uri.mp3 $uri.wav =404;
        autoindex off;
    }

    location ~ \.php$ {                                                       
        try_files $uri $uri/ $uri.html $uri.php =404;                                              
        fastcgi_pass unix:/var/run/php5-fpm.sock;                         
        fastcgi_index index.php;                                         
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
        include fastcgi_params;                                                    

        }

    location ~ /\.wav$ {
        add_header Content-Disposition "inline";
        }

    location /db55-manager0 {

                # Option: cela permet de séparer les log de phpmyadmin des autres
                access_log /home/dev/www/.logs/phpmyadmin_access.log;
                error_log /home/dev/www/.logs/phpmyadmin_error.log;

                index index.php index.html index.htm;

                # Interdiction de certains fichier sensibles.
                location ~ ^/db55-manager/(README|LICENSE|ChangeLog|DCO)$ {
                        deny all;
                }
                # Interdiction des fichiers .md
                location ~ ^/db55-manager/(.+\.md)$ {
                        deny all;
                }
                # interdiction de certains répertoires sensibles.
                location ~ ^/db55-manager/(doc|sql|setup)/ {
                        deny all;
                }

                #configuration de fastCGI pour PhpMyAdmin
                location ~ ^/db55-manager/(.+\.php)$ {
                        try_files $uri =404;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        fastcgi_pass    unix:/var/run/php/php7.0-fpm.sock;
                        fastcgi_index  index.php;
                        include        fastcgi_params;
                        }

                auth_basic "Pour continuer, merci de vous authentifier sur nos serveurs !";
                auth_basic_user_file /etc/nginx/pma_password;   
        }

    location /projects/browse/ {
                auth_basic "Pour continuer, merci de vous authentifier sur nos serveurs.";
                auth_basic_user_file /etc/nginx/pswd_projects_website;
        }

        error_log /home/dev/www/.logs/error_log;
        access_log /home/dev/www/.logs/access_log;

    # Redirection documents site www.website.fr 

        # -->Section about
            rewrite ^/qui-sommes-nous$ /pages-site-internet/about/qui-sommes-nous.php last;
        # --></> Fin about

        # -->Section produits
            rewrite ^/cxs-directory$ /pages-site-internet/produits/cxs-directory.php last;      
            rewrite ^/cxs-workstation$ /pages-site-internet/produits/cxs-workstation.php last;
            rewrite ^/tools-acts$ /pages-site-internet/produits/tools-acts.php last;
        # --></> Fin produits

        # -->Section services-informations
            rewrite ^/informations-cloud$ /pages-site-internet/services-informations/informations-cloud.php last;
            rewrite ^/informations-developpement-web-et-logiciels$ /pages-site-internet/services-informations/informations-developpement-web-et-logiciels.php last;
            rewrite ^/informations-graphisme$ /pages-site-internet/services-informations/informations-graphisme.php last;
            rewrite ^/informations-vps$ /pages-site-internet/services-informations/informations-vps.php last;
        # --></>Fin services-informations

        # -->Section projects/browse
            rewrite ^/browse$ /projects/browse/ last;
        # --></>Fin projects/browse
    # Fin de toutes les redirections

    location ~*^.+(swf|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
        proxy_pass http://192.168.0.47:80;
        proxy_cache_valid 2d;
        expires max;
    }

    ssl on;
    ssl_certificate /etc/letsencrypt/live/www.website.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.website.fr/privkey.pem;

    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/www.website.fr/fullchain.pem;

    resolver 8.8.8.8 8.8.8.4 208.67.222.222 valid=300s;
    resolver_timeout 3s;

    ssl_session_cache shared:SSL:100m;
    ssl_session_timeout 24h;
    ssl_session_tickets on;
    ssl_session_ticket_key /etc/nginx/ssl/ticket.key;

    ssl_dhparam /etc/nginx/ssl/dhparam4.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

    error_page 403 /403.html;
    error_page 404 /404.html;
    error_page 500 /500.html;

    location ~ /\. { deny all; access_log off; log_not_found off; }

    location ~ [^/]\.php(/|$) 
{
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) 
    {
            return 404;
    }
}
}

Merci !

C'est quoi l'url que tu souhaites joindre? Et ton fichier il te propose de le dl en tant qu'octet-stream?

m.daveur
Auteur

C'est à dire ? Mon url est un site internet que j'héberge et jusque la tout va tres bien. Mais c'est ce problème ou le fichier n'arrive pas à interpréter l'erreur et donc me demande de le télécharger.

Par contre je ne comprend pas ce que vous voulez dire par supprimer en tant qu'octet-stream...

dl = download

Et une url c'est pas un site... Tu comprends ce que veut dire "url rewirting"? Si tu ignores ce qu'est une url c'est mal barré :-D

A quelle adresse se trouve ton fichier en question..?

m.daveur
Auteur

Oui je sais mais je ne parle pas d'utl rewritting mais que chaque fichier en format php si on enleve l'extension on veut le telecharger.

Je souhaite seulement que quand on enleve l'extension ".php" d'une page il me redirige vers ma page d'erreur 404.
Tout le site se trouve dans /home/dev/www/public_html
La config : /etc/nginx/ et tout le tralalère... :)

Et quand ça les dl, c'est quoi le mime type résultant..? Octet-stream?

Parce qu'à mon avis, si tu enlèves l'extension ça match tout simplement rien et donc nginx fallback sur le default_type...

m.daveur
Auteur

Je te fournit le mime.types :

types {

  # Data interchange

    application/atom+xml                  atom;
    application/json                      json map topojson;
    application/ld+json                   jsonld;
    application/rss+xml                   rss;
    application/vnd.geo+json              geojson;
    application/xml                       rdf xml;

  # JavaScript

    # Normalize to standard type.
    # https://tools.ietf.org/html/rfc4329#section-7.2
    application/javascript                js;

  # Manifest files

    application/manifest+json             webmanifest;
    application/x-web-app-manifest+json   webapp;
    text/cache-manifest                   appcache;

  # Media files

    audio/midi                            mid midi kar;
    audio/mp4                             aac f4a f4b m4a;
    audio/mpeg                            mp3;
    audio/ogg                             oga ogg opus;
    audio/x-realaudio                     ra;
    audio/x-wav                           wav;
    image/bmp                             bmp;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    image/jxr                             jxr hdp wdp;
    image/png                             png;
    image/svg+xml                         svg svgz;
    image/tiff                            tif tiff;
    image/vnd.wap.wbmp                    wbmp;
    image/webp                            webp;
    image/x-jng                           jng;
    video/3gpp                            3gp 3gpp;
    video/mp4                             f4p f4v m4v mp4;
    video/mpeg                            mpeg mpg;
    video/ogg                             ogv;
    video/quicktime                       mov;
    video/webm                            webm;
    video/x-flv                           flv;
    video/x-mng                           mng;
    video/x-ms-asf                        asf asx;
    video/x-ms-wmv                        wmv;
    video/x-msvideo                       avi;

    # Serving `.ico` image files with a different media type
    # prevents Internet Explorer from displaying then as images:
    # https://github.com/h5bp/html5-boilerplate/commit/37b5fec090d00f38de64b591bcddcb205aadf8ee

    image/x-icon                          cur ico;

  # Microsoft Office

    application/msword                                                         doc;
    application/vnd.ms-excel                                                   xls;
    application/vnd.ms-powerpoint                                              ppt;
    application/vnd.openxmlformats-officedocument.wordprocessingml.document    docx;
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet          xlsx;
    application/vnd.openxmlformats-officedocument.presentationml.presentation  pptx;

  # Web fonts

    application/font-woff                 woff;
    application/font-woff2                woff2;
    application/vnd.ms-fontobject         eot;

    # Browsers usually ignore the font media types and simply sniff
    # the bytes to figure out the font type.
    # https://mimesniff.spec.whatwg.org/#matching-a-font-type-pattern
    #
    # However, Blink and WebKit based browsers will show a warning
    # in the console if the following font types are served with any
    # other media types.

    application/x-font-ttf                ttc ttf;
    font/opentype                         otf;

  # Other

    application/java-archive              ear jar war;
    application/mac-binhex40              hqx;
    application/octet-stream              bin deb dll dmg exe img iso msi msm msp safariextz;
    application/pdf                       pdf;
    application/postscript                ai eps ps;
    application/rtf                       rtf;
    application/vnd.google-earth.kml+xml  kml;
    application/vnd.google-earth.kmz      kmz;
    application/vnd.wap.wmlc              wmlc;
    application/x-7z-compressed           7z;
    application/x-bb-appworld             bbaw;
    application/x-bittorrent              torrent;
    application/x-chrome-extension        crx;
    application/x-cocoa                   cco;
    application/x-java-archive-diff       jardiff;
    application/x-java-jnlp-file          jnlp;
    application/x-makeself                run;
    application/x-opera-extension         oex;
    application/x-perl                    pl pm;
    application/x-pilot                   pdb prc;
    application/x-rar-compressed          rar;
    application/x-redhat-package-manager  rpm;
    application/x-sea                     sea;
    application/x-shockwave-flash         swf;
    application/x-stuffit                 sit;
    application/x-tcl                     tcl tk;
    application/x-x509-ca-cert            crt der pem;
    application/x-xpinstall               xpi;
    application/xhtml+xml                 xhtml;
    application/xslt+xml                  xsl;
    application/zip                       zip;
    text/css                              css;
    text/csv                              csv;
    text/html                             htm html shtml;
    text/markdown                         md;
    text/mathml                           mml;
    text/plain                            txt;
    text/vcard                            vcard vcf;
    text/vnd.rim.location.xloc            xloc;
    text/vnd.sun.j2me.app-descriptor      jad;
    text/vnd.wap.wml                      wml;
    text/vtt                              vtt;
    text/x-component                      htc;

}

Merci de prendre de ton temps ! :D

J'ai pas besoin du mime.types ^^' Réponds juste à ma question :-s

m.daveur
Auteur

Tu va me tuer mais je comprend pas trop ta question... :D

Te tuer? Boff... J'ai pas ton adresse ^^'

Quand tu tentes de joindre une url sans préciser l'extension, il te propose de dl ou il dl d'office sans rien te demander..?

m.daveur
Auteur

Mdrrr

Bh pour te dire vu que j'ai paramétré dans GooGle Chrome une fonction qui permet de choisir le répertoire de téléchargement...
Sinon oui il me le télécharge !

Lâche chrome X-D Utilise FF ;-)

Bon, du coup, c'est quasiment sûr que nginx ne parvienne pas à matcher ton url... Du coup => comportement par défaut!

Donc, fais une location qui match l'absence de l'extension... Et/ou utilises "return"!

m.daveur
Auteur

Je l'uilise aussi XXD !

Tu saurais comment faire ? :)

m.daveur
Auteur

Sous quelle forme ??

Avec tout ce que contient ton fichier! Tu devrais pouvoir t'en sortir, non? Y'a même des trucs que je ne connaissais pas ^^'

m.daveur
Auteur

Certe, mais la question est que comment je peut rediriger tout trafic des pages sans le .php vers le 404 ?

m.daveur
Auteur

Pourtant j'ai l'habitude de trouver par moi même mes erreurs mais là, c'est plus fort que moi !!
Après de nombreuses recherches sur internet sans succès... Je déprime mdr :D

Ton pb vient du fait que tu essayes toutes les extensions de façon 'bourrin'
Ce que fait try_files

try_files $uri $uri/ $uri.html $uri.php;

S'il ne touve pas le fichier $uri alors il cherche le répertoire du même nom puis il commence par lui rajouter l'extension .html et sinon il essaye l'extension .php
C'est n'importe quoi

Bah, soit tu mets, après tes locations, un return 404, soit tu mets une location qui match quand y'a pas de .php à la fin...

m.daveur
Auteur

Justement je me suis inspiré du uttoriel de Grafikart...
Je comprend pas @Huggy ! Comment je peux corriger cela ? Merci

@Psylozoff je peux faire quelque chose du type :

location ~ /\ {
        deny all;
        access_log off;
        log_not_found off;
    }

? Merci à vous deux ! ;)

X-D @Huggy! C'est le sentiment que j'avais également, sans être vraiment sûr vu que je ne maitrise pas le sujet à 100% ^^'

Utilises try_files en fonction de ce que tu souhaites... Définis l'algorithme qui décrit comment nginx doit traiter ton bazar ;-) Ca nous aidera beaucoup et toi, y compris!

Par contre, pk "/\"?? En gros, tu ne comprends pas vraiment ce que ton fichier fait, si..?? Tu ne sais pas vraiment utiliser les regexp?

Que veux tu que ça fasse si tu ne mets pas l'extension php ?

  • page not found =404
  • redirection sur une page d'index.php qui traitera la request_uri en la parssant
location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                error_page 404 /404.html;
                try_files $uri $uri/ /index.php =404;
m.daveur
Auteur

@Huggy Cela ne fonctionne pas...

tu restart nginx à chaque fois ?
le reload ne marche pas toujours

m.daveur
Auteur

@Psylozoff Pour t'avouer, je me suis reporté essentiellement au tuto de Grafikart pour nottamment empecher l'access aux fichiers .htaccess et tout le bordel...

Le try_files, je l'avais utilisé dans mon fichier cela me semble.
Quand un fichier php est inexistant, il m'affiche correctement une erreur : jusque là OK.
Mais c'est apres que si un fichier php existe, il le telecharge sans même remonter une erreur .

Ca me le fait partout !

m.daveur
Auteur

Je fais le nginx -t pour tout checker et apres je fais un nginx restart et aussi un reload

Ca a l'air d'être un sacré bordel ton site... Pour commencer tu devrais définir la "root" de ton block server pour atteindre la partie "routable" de ton site!! Ca permettrait de virer tous les deny all... Tu mets tes dossiers et fichiers sensibles plus haut que ton dossier "routable", comme ça il sera juste impossible de les atteindre via l'url! Ca va faire du ménage!!

Ensuite, liste les actions qu'nginx devra mettre en oeuvre pour traiter les requêtes... Avec papier-crayon histoire de déconnecter de l'écran qui te bouffe le cerveau et t'empêche de réfléchir normalement!!

Le .htacces O_o..? T'as apache derrière nginx??

m.daveur
Auteur

Nan mais c'est juste un petit exemple.
En gros j'ai permis d'interdir l'accès via un navigateur aux fichiers commencant par un *.*****

m.daveur
Auteur

@Psylozoff je dois virer des trucs dans mon fichier conf ?

Pour ton arbo de site :
www -> ton_site->[dossier_routable->[tes_fichiers_php_et_sous-dossiers_routables], dossier_sensible, fichier_sensible]

Puis :

server {
listen [...]
root /usr/local/www/ton_site/dossier_routable
}

Quand tu dis "le fichier php se télécharge sans montrer d'erreur" tu veux dire que le contenu s'affiche (le code php)
ou bien qu'il s'exécute ?

C'est ton architecture de dossiers que tu dois revoir, surtout ^^'

Il se télécharge ^^ En tant que fichier, dans son dossier de dl... Très certainement en type mime "octet-stream" puisque c'est le default_type...

m.daveur
Auteur

@Huggy il ne s'affiche même pas ! il veut télécharger et apres une fois telechargé quand on l'ouvre on voit tout le code (HTML, CSS, JS et même le PHP !! )

m.daveur
Auteur

@Psylozoff tu as raison ! Mais je ne sais pas vraiement comment ^^

m.daveur
Auteur

@Psylozoff oue c'est ça ! Et donc ?

Ben, y'a aucun block qui match ton url, donc il renvoie le résultat sous la forme par défaut...

m.daveur
Auteur

Et ce code que @Huggy a fournit ?...
Est-il correct ? Moi, il ne fonctionne pas !

location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                error_page 404 /404.html;
                try_files $uri $uri/ /index.php =404;

Sur les forum, la solution qui semble marcher c'est de vider le cache du navigateur !!!

Effectivement, il faut configurer le navigateur en mode "no cache" quand on fait des tests sur un site dont on modifie le contenu sans toucher aux urls ;-p

Le code d'Huggy est très juste! Enfin, ça dépend de ce que tu veux faire :-s

m.daveur
Auteur

Déjà fait même en changeant de navigateur :/

Peux-tu nous donner plus d'infos
est-ce en http, https ou les deux
dans un répertoire particulier ou la racine
dans ta config il y a un php par socket unix et un autre par tcp port 9000 ? pourquoi

Commence par comprendre ce que fait ta config, précisément... Et nettoie un peu tout ce merdier :-D Y'a un paquet de truc inutiles que tu peux gérer en appliquant simplement de bonnes pratiques architecturales!

m.daveur
Auteur

Le site internet est accessible seulement en https SSL port 443 dont tout le site internet est dans un répertoire tel que /home/dev/www/public_html
Demain je revois toute l'architecture du fichier de conf.

Je regarde tout demain ! Merci à vous deux!

Je parle de l'architecture de tes fichiers/dossiers ;-)

m.daveur
Auteur

Oui tkt ça aussi. Je reviendrais demain surêment ici :) Merci encore !

m.daveur
Auteur

Yop ;)

Je n'ai toujours pas trouvé de solution... meme en essayant le code fournit !
Je suis en galère

m.daveur
Auteur

Et avez-vous bien compris mon problème ?

m.daveur
Auteur

LE PROBLEME EST RESOLU ! MERCI

Si tu pouvais mettre ta solution et passer le sujet en résolu ce serait mérveilleux :-s

m.daveur
Auteur

Il faut simplement interpreter l'eereur sur la racine du site en affectant un try_files $uri/ par une Location / ;)

Je veux dire, fais une réponse structurée à ta question originelle et sélectionne-la quand tu passeras ce sujet en status "résolu"... T'as jamais utilisé de forum O_o?

En gros il te demande de sélectionner ce qui t'as permis de répondre à ta question (où si tu as résolu ton problème tout seul d'écrire ta solution assez précise et de cliquer sur "Il a répondu à ma question". Ce qui passera ton sujet en résolue.