Hello World,

Alors voila je suis sur Nginx avec php7.0

j'ai un fichier php qui génére un fichier texte et pour l'appeler par l'url je fais monfichier.txt "qui est en fait du php"

j'ai donc une rêgle de rewrite dans ma conf Nginx

rewrite ^/monfichier.txt /monfichier.php break;

Ce que je veux

Que monfichier.txt qui "qui est bien monfichier.php" s'execute et s'affiche dans le navigateur

Ce que j'obtiens

Le téléchargement d'un fichier monfichier.txt avec le code php non exécuté dedans,
on même temps ca peut sembler logique, mais sous apache ça marchait comme ça....

Une idée ? Merci à vous.

Franck

5 réponses


CendFr
Auteur

j'ai trouvé, il faut remplacer le break par last, afin que php s'execute....

Effectivement, tu peux faire de deux façons:

server{
    #option 1
    rewrite ^/monfichier.txt /monfichier.php last;
    #option 1bis 
    rewrite ^/monfichier.txt /monfichier.php permanent;

    #option 2
    location ^/monfichier.txt {
        rewrite /monfichier.php permanent;
    }
 }
CendFr
Auteur

Merci Yanis pour ce retour !
j'en profite pour te poser une seconde question,
avec un bloc sur un dossier

Ce code marche :

location  /dossier {
    rewrite ^/dossier/sousdossier/monfichier.txt  /dossier/sousdossier/monfichier.php last;
}

Ce code marche pas "rewrite en relatif"

location  /dossier {
    rewrite ^/sousdossier/monfichier.txt  /sousdossier/monfichier.php last;
}

Merci.

Franck

En effet c'est une histoire de regex :) le ^ veut dire que ton url doit absolument commencer par /sousdossier/monfichier.txt

tu trouveras comment faire ici :) http://stackoverflow.com/questions/13706658/variable-capture-in-nginx-location-matching

CendFr
Auteur

Merci à toi !