Bonjour,

Je viens tenter ma chance, j'ai un souci avec un htaccess :
J'ai un htaccess "classique" à la racine de mon site, fourni par laravel, qui redirige normalement toute les urls vers /index.php, afin que laravel afiche la bonne vue.
Or, si je demande l'url /img/1234/mini_1234.jpg, je ne suis pas redirigé vers le index.php, j'obtiens une 404 servie par nginx.
Pour info, le repertoire /img/1234 existe, mais le fichier mini_1234.jpg n'existe pas. Justement, s'il n'existe pas, c'est laravel qui doit choper l'url et le creer à ce moment la.
Je suis sur que laravel n'intervient pas du tout, puisque si je vais par exemple sur /img2/1234/mini_1234.jpg (avec img2 qui, lui, n'existe pas), je tombe sur la 404 fournie cette fois pas Laravel.
Pour résumer, si je demande un fichier dans un sous répertoire existant, le .htaccess à la racine n'est pas interprété, ou en tous ca ne redirige pas vers le /index.php.

Pour info, voici le contenu du htaccess :

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

</IfModule>

Une idée de mon souci ? Une piste ?
Merci !
Oliv.

13 réponses


arnich
Réponse acceptée

Oui mais les fichiers htaccess sont propre a apache. Nginx ne les comprend pas

Salut,

Ton VHost tape bien dans le dossier mon_app/public ?

As-tu un .htaccess dans le répertoire img ? ou dans img/1234

Merci pour vos réponses.
Oui, mon vhost a bien /monapp/public comme dossier root. et non, pas de htaccess ni dans ilg, ni dans 1234...

pour info complémentaire, mon serveur tourne sous apache2 / nginx.
Voici le fichier de config nginx :

server {
    listen 80 default_server;
    root /var/www/public;

    # Add index.php to the list if you are using PHP
    index index.html index.php index.htm index.nginx-debian.html;

    server_name *.monsite.fr

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

  #location ~* \.(?:ico|css|js|gif|jpe?g|png|gz|zip|flv|rar|wmv|avi|swf|htc|mpeg|mpg|txt|mp3|mov)$ {
  location ~ ^/(img|assets)/ {
    expires 7d;
    add_header Pragma public;
    add_header Cache-Control "public";
    access_log off;
  }

    location /phpmyadmin { 
      alias /usr/share/phpmyadmin/;
      index index.php index.html index.htm;

      location ~ \.php$ { 
          include fastcgi_params; 
          fastcgi_param SCRIPT_FILENAME $request_filename; 
          fastcgi_pass unix:/var/run/php5-fpm.sock;
      } 
  }

  # pass the PHP scripts to FastCGI server listening on the php-fpm socket
  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;
      fastcgi_buffer_size 128k;
      fastcgi_buffers 256 16k;
      fastcgi_busy_buffers_size 256k;
      fastcgi_temp_file_write_size 256k;
      include fastcgi_params;
  }

}

C'est une drole d'idée d'utiliser nginx et apache en même temps
je pensais qu'nginx était en proxy au dessus d'apache, mais là ils sont concurents !!!

Bah, j'ai lu un peu partout que le couple apache + nginx fonctionnait plutot pas mal, donc je suis parti la dessus. Le souci sur ce point, c'est que j'ai peu d'experience dans le domaine de l'administration linux, je me suis pas mal battu pour configurer ce dédié VPS, donc la, ca tourne, je touche plus trop ;)
Mais ca ne répond pas à ma question, tu penses que mon probleme peut etre lié a cette configuration ?

La règle pour tes images c'est

location ~ ^/(img|assets)/ {
    expires 7d;
    add_header Pragma public;
    add_header Cache-Control "public";
    access_log off;
  }

mais il manque un try_files $uri;
sinon ça fait rien

Oui, pour la regle des images, pas de soucis la dessus. C'est cette regle qui empeche l'interpretation du htaccess root ?
Tu es sur pour le coup de la directive try_files obligatoire ?
Il me semble que meme sans cette directive, les regles nginx sont appliquées, non ?
Je viens d'essayer d'ajouter juste le try_files $uri; , nginx ne veut plus redemarrer ...

Les fichier htaccess ne servent a rien avec nginx.

Dans la partie ou tu gères tes images essais de rajouter
root /chemin/vers/dossier/img

bah, les fichiers htaccess ont quand même quelques avantages, je trouve, ne serait ce qu'en terme de sécurité ou je peux y laisser accès a plusieurs personnes sans laisser libre accès a la configuration nginx...
le fait de changer le rroot de ma config img m'apportera quoi pour le souci indiqué ?
merci ;)

Ah merde, j'etais persuadé que tous les serveurs web Linux interpretaient et geraient les .htaccess, voila mon erreur, mea culpa !
En effet, j'ai encore appris quelque chose auj. Et du coup, en completant le post de Huggy, en ajoutant la regle try_files $uri /index.php dans les regles de mon img, ca fonctionne !
Merci à tous ;)