Certe, mais la question est que comment je peut rediriger tout trafic des pages sans le .php vers le 404 ?
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 :
Auriez-vous une solution pou confronter ce problème ?
Un grand merci ! :)
66 réponses
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
La solution :
Merci ;)
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 ^^'
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
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 :)
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
Je possède bien cette structure...
Cela ne résout pas mon problème :/
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...
Merci ! Le voici :
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
Je vous montre tout !
Merci !
C'est quoi l'url que tu souhaites joindre? Et ton fichier il te propose de le dl en tant qu'octet-stream?
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..?
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...
Je te fournit le mime.types :
Merci de prendre de ton temps ! :D
J'ai pas besoin du mime.types ^^' Réponds juste à ma question :-s
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..?
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"!
Je l'uilise aussi XXD !
Tu saurais comment faire ? :)
Sous quelle forme ??
Ton pb vient du fait que tu essayes toutes les extensions de façon 'bourrin'
Ce que fait try_files
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...
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 :
? 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
@Huggy Cela ne fonctionne pas...
tu restart nginx à chaque fois ?
le reload ne marche pas toujours
@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 !
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??
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 *.*****
@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 :
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...
@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 !! )
@Psylozoff tu as raison ! Mais je ne sais pas vraiement comment ^^
@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...
Et ce code que @Huggy a fournit ?...
Est-il correct ? Moi, il ne fonctionne pas !
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
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!
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 ;-)
Oui tkt ça aussi. Je reviendrais demain surêment ici :) Merci encore !
Yop ;)
Je n'ai toujours pas trouvé de solution... meme en essayant le code fournit !
Je suis en galère
Et avez-vous bien compris mon problème ?
LE PROBLEME EST RESOLU ! MERCI
Si tu pouvais mettre ta solution et passer le sujet en résolu ce serait mérveilleux :-s
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.
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
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