1 votes

Comment puis-je utiliser le fichier .htaccess converti dans la configuration de Nginx ?

Cela fait environ 5 jours que j'essaie de lancer mon site web sans succès. Le problème est que j'utilise apache en local et que mon site fonctionne bien en local. Mon serveur utilise nginx et je ne peux pas utiliser la conversion .htaccess dans la configuration de nginx.

Voici une structure simplifiée de mon site web :

/mywebsite
    /application
    /files
        file1.php
        .htaccess
    /public
        /css
        /js
.htaccess

Tu vois ? J'ai deux .htaccess des fichiers. L'un est situé à la racine et l'autre à l'intérieur de l'ordinateur. files répertoire. Tout fonctionne sur le localhost, puisque j'utilise apache sur localhost. Maintenant je dois le faire fonctionner sur le serveur qui utilise nginx .

J'utilise ce site web pour convertir le contenu des fichiers htaccess en nginx-configuration.

Tout d'abord, dois-je coller le résultat de la conversion dans quel fichier ? (où se trouve le fichier de configuration de nginx ? /etc/nginx/nginx.conf ?)

Et comment je peux gérer ces deux .htaccess fichiers ? Dois-je créer deux fichiers nginx également ?


.htaccess dans la racine :

RewriteEngine on
Options -Indexes

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([\s\S]*)$ index.php?rt=$1 [L,B,QSA]

ErrorDocument 404 /error404.html

Options -Indexes

<Files *.php>
    Order Deny,Allow
    Deny from all
    Allow from ::1
</Files>

<Files index.php>
    Order Allow,Deny
    Allow from all
</Files>

.htaccess qui se trouve dans files répertoire :

<Files *.php>
   Allow from all
</Files>

0voto

Tero Kilkanen Points 32968

Dans le cas de nginx, toutes les configurations spécifiques au site sont incluses dans un seul fichier server et location sont utilisés pour ajouter différentes directives de configuration pour des URLs particuliers.

Dans l'ensemble, la philosophie est assez différente de celle d'Apache2, vous devez donc l'étudier afin de comprendre comment réaliser une configuration similaire avec lui.

Dans votre cas, les directives de configuration de nginx pourraient ressembler à quelque chose comme ceci :

location / {
    try_files $uri $uri/ /index.php?rt=$request_uri;
}

location ~ \.php$ {
    deny all;
}

location ^~ /index.php {
    # include here the configuration items from nginx default location ~  \.php$ block
}

location ^~ /files {
    # include here either PHP configuration directives from location ~ \.php$ block if you want PHP scripts executed from here. If you do not want PHP scripts to be executed, then use
    allow all;
}

Ces directives sont incluses soit dans la configuration principale de nginx, soit dans la configuration spécifique au site qui se trouve sous /etc/nginx/sites-available répertoire.

Quelques explications sur les blocs :

Le premier location block est l'implémentation standard du modèle de contrôleur frontal sur nginx. Cela signifie que nginx vérifie d'abord si le fichier requis est trouvé quelque part sur le serveur, le serveur s'il existe. Sinon, il envoie la requête à index.php avec la partie URI de la demande originale en tant qu'argument pour ?rt . C'est légèrement différent de votre implémentation, puisque là vous utilisez une regex pour limiter les URIs possibles passés comme argument.

Le deuxième location rejette l'accès à tous les URI se terminant par .php$.

Le troisième bloc ajoute une exception pour index.php qui est traité par le backend PHP.

Le quatrième bloc envoie les requêtes PHP script au backend PHP, ou permet simplement de les envoyer à l'utilisateur.

À titre d'avertissement, je ne peux pas tester ces règles car je ne connais pas votre environnement logiciel. Il se peut donc qu'elles ne répondent pas à vos exigences ou qu'elles échouent pour certaines parties.

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