YunoHost-Apps / multi_webapp_ynh

Custom Webapp without FTP access
GNU General Public License v3.0
5 stars 8 forks source link

404 Not Found (htaccess et nginx) #5

Closed nibreh closed 8 years ago

nibreh commented 9 years ago

Bonjour

En installant une application tel que VOID ou HTMLY (qui utilisent un fichier .htaccess avec rewrite) dans my_webapp, lors de la navigation sur le site, j'obtiens une erreur 404 pour toutes les pages. La page d'accueil s'affiche par contre.

ex: domain.com/my_webapp = page d'accueil de l'appli accessible

domain.com/my_webapp/page_du_site = 404 Not Found

Je ne rencontrais pas ce problème auparavant.

Est-ce une erreur de ma part, un truc à modifier quelque part, ou bien my_webapp n'est pas à jour avec les dernières versions de yunohost ?

Cordialement

maniackcrudelis commented 9 years ago

Salut, Brièvement, je serais d'avantage dispo la semaine prochaine. Yunohost exploite nginx, et my_webapp également. Les fichiers htaccess sont des fichiers pour apache, nginx ne les interprète pas. Tu dois réécrire ces règles pour nginx. C'est pas simple... Tu peux voir du côté de mon app WordPress pour ynh où le cas s'est présenté. Bon courage.

nibreh commented 9 years ago

Ha d'accord ! J'étais persuadé d'avoir testé my_webapp il y a quelque temps avec deux ou trois CMS qui fonctionnent avec .htaccess, d'où ma surprise. Mais ma mémoire doit être défaillante. Merci du renseignement. Je vais voir si je me débrouille à bidouiller ça tout en apprenant à utiliser / configurer nginx.

nibreh commented 9 years ago

Ok, alors dis moi si je me trompe, surtout si je fais une bêtise ;) J'apprends un peu tout seul à bidouiller.

Il faut modifier le fichier /etc/nginx/conf.d/sous.domain.com.d/root_webapp.conf généré par l'installation de my_webapp_ynh. Et on peut s'aider de http://winginx.com/en/htaccess pour convertir un fichier htaccess pour nginx.

Par exemple, pour installer Sassolino, une fois celui-ci dézippé dans /var/www/webapp_user

Dans root_webapp.conf, j'ai viré if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; } que j'ai remplacé par if (!-e $request_filename){ rewrite ^(.*)$ /index.php?dir=$1; }

On redémarre nginx.

Et là du coup, ça fonctionne pour Sassolino !

maniackcrudelis commented 9 years ago

Salut,

les convertisseurs de htaccess ne sont pas toujours très fiable... Mais si à fonctionné pour ce cas, tant mieux. Effectivement il faut modifier le fichier de conf nginx associé au "virtual host". Par contre, la ligne que tu as viré permet de forcer https et est compatible en général avec d'autre règles de réécriture.

nibreh commented 9 years ago

Autant pour moi, j'ai remis la ligne pour https !

Oui, après quelques tests, le convertisseur ne marche pas à tout les coups (pour void par exemple). Un simple copier coller serait trop beau ;)

Merci pour le retour !

Tchuss

maniackcrudelis commented 9 years ago

Tu dois toutefois pouvoir trouver des infos dans la dox de nginx. http://nginx.org/en/docs/dirindex.html

Mais personnellement je me suis arraché les cheveux là dessus, ce serait plus simple si nginx pouvait interpréter les fichiers htaccess...

nibreh commented 9 years ago

Salut

Je reviens vers toi, car je voudrais installer Yellow (cms auquel je participe un peu), mais je sèche complètement concernant la configuration de Nginx.

Il y a bien un exemple ici (https://github.com/datenstrom/yellow/wiki/Web-server-configuration) mais je ne sais pas comment adapter ça à YunoHost.

J'ai publié un billet sur le forum de YunoHost https://forum.yunohost.org/t/configuration-nginx-htaccess-pour-yellowcms/702

Si jamais, à tes heures perdues, tu voudrais bien y jeter un oeil.

Au plaisir

maniackcrudelis commented 9 years ago

Salut,

désolé j'avais pas vu ton message. Ma connexion internet est morte depuis quelques jours, donc je ne reçois plus de mail...

Déjà, le fichier htaccess tu peux le mettre de côté, il ne sera pas utilisé par nginx, et son contenu a été transféré dans la proposition de config pour nginx.

Ensuite, il faut merger le contenu de la config nginx proposée par sur le dépôt de Yellow avec la config Yunohost par défaut. Et essayer...

Le mot clé "server {" doit être supprimé, on travaille en virtual host donc il est inutile. "listen", "server_name", "root" et "charset" pareil.

A partir du fichier de config de la web_app: L'index yellow.php doit être ajouté à la suite des index dans la config nginx. L' "error_page" devrait pouvoir être placé après la ligne d'index. Les 4 locations qui suivent (sauf le dernier donc) sont, je pense, à placer en l'état juste avant "# Include SSOWAT user panel."

Le dernier location doit être mergé avec celui de la config de base. Le mot-clé "fastcgi_pass" m'inquiète un peu tout de même, si c'est un reverse proxy, pas sûr que ça passe.

Ça devrait donner ça:

location /home {
       alias /var/www/webapp_nibreh/home/;
       if ($scheme = http) {
              rewrite ^ https://$server_name$request_uri? permanent;
       }
       index yellow.php index.php index.html index.htm;
       error_page 404 /error.html;
       default_type text/html;
       location ~ [^/]\.php(/|$) {
           fastcgi_split_path_info ^(.+?\.php)(/.*)$;
           fastcgi_pass unix:/var/run/php5-fpm.sock;
           fastcgi_pass 127.0.0.1:9000;
           fastcgi_index yellow.php;
           include fastcgi_params;
           fastcgi_param  REMOTE_USER $remote_user;
           fastcgi_param  PATH_INFO $fastcgi_path_info;
       fastcgi_param SCRIPT_FILENAME $request_filename;
       }
       location /cache {
           rewrite ^(.*)$ /error break;
       }

       location /content {
           rewrite ^(.*)$ /error break;
       }

       location /system {
           rewrite ^(.*)$ /error break;
       }

       location / {
           if (!-e $request_filename) {
               rewrite ^/(.*)$ /yellow.php last;
           break;
           }
       }
  # Include SSOWAT user panel.
  include conf.d/yunohost_panel.conf.inc;
}

"fastcgi_pass 127.0.0.1:9000;" est potentiellement un problème je pense, il faudrait essayer sans le cas échéant.

nibreh commented 9 years ago

Hello

Pas de problème si tu réponds en retard, t'inquiètes ;)

De mon côté, j'étais occupé courant juillet, mais j'ai finis par prendre le temps pour tester. Alors ta configuration n'as pas marché. Mais j'ai fini par obtenir un résultat positif. Voici comment:

J'ai créé un sous-domaine puis j'ai installé my_webapp à la racine.

Puis dans le fichier de conf nginx, j'ai mis ça:

error_page 404 /error.html;
location /cache {
    rewrite ^(.*)$ /error break;
}
location /content {
    rewrite ^(.*)$ /error break;
}
location /system {
    rewrite ^(.*)$ /error break;
}

location / {
   alias /var/www/webapp_name/;
   if ($scheme = http) {
          rewrite ^ https://$server_name$request_uri? permanent;
   }
   index yellow.php index.php index.html index.htm;
   default_type text/html;
   location ~ [^/]\.php(/|$) {
       fastcgi_split_path_info ^(.+?\.php)(/.*)$;
       fastcgi_pass unix:/var/run/php5-fpm.sock;
       fastcgi_index yellow.php;
       include fastcgi_params;
       fastcgi_param  REMOTE_USER $remote_user;
       fastcgi_param  PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $request_filename;
   }

    if (!-e $request_filename) {
        rewrite ^/(.*)$ /yellow.php last;
        break;
    }

 # Include SSOWAT user panel.
  include conf.d/yunohost_panel.conf.inc;
}

Enfin, j'avais une erreur de redirection / 403 pour éditer les pages en ligne, mais ça concerne le fichier de configuration de Yellow. (webinterfaceServerScheme = https et non http)

Tchuss

nibreh commented 9 years ago

Au final, dans domaine.com/home plutôt qu'à la racine d'un sous-domaine, voilà ce que j'ai fait:

error_page 404 /home/error.html;

location /home/cache {
    rewrite ^/home/(.*)$ /home/error break;
}
location /home/content {
    rewrite ^/home/(.*)$ /home/error break;
}
location /home/system {
    rewrite ^/home/(.*)$ /home/error break;
}

      location /home {
       alias /var/www/webapp_name/home/;
       if ($scheme = http) {
              rewrite ^ https://$server_name$request_uri? permanent;
       }
       index yellow.php index.php index.html index.htm;
       default_type text/html;
       location ~ [^/]\.php(/|$) {
           fastcgi_split_path_info ^(.+?\.php)(/.*)$;
           fastcgi_pass unix:/var/run/php5-fpm.sock;
           fastcgi_index yellow.php;
           include fastcgi_params;
           fastcgi_param  REMOTE_USER $remote_user;
           fastcgi_param  PATH_INFO $fastcgi_path_info;
            fastcgi_param SCRIPT_FILENAME $request_filename;
       }

    if (!-e $request_filename) {
        rewrite ^/home/(.*)$ /home/yellow.php last;
        break;
    }

      # Include SSOWAT user panel.
     include conf.d/yunohost_panel.conf.inc;
    }
maniackcrudelis commented 9 years ago

Salut,

je suis toujours peu réactif, car ma connexion n'est toujours pas rétablie... ;(

J'espère que le "rewrite ^/home/" ne fais pas ignorer "location /home {". Enfin, je ne suis vraiment pas expert sur nginx.

En tout cas, si le coeur t'en dit, n'hésite pas à packager l'application pour Yunohost, ainsi d'autres pourront profiter du travail que tu viens d'accomplir.

nibreh commented 9 years ago

yo

A priori pas de problème avec rewrite ^/home/ et location /home {

Peut-être est-ce parce que je redirige la racine du domaine vers /home ?

Je vais voir pour packager l'application, faut que je regarde comment ça se passe

maniackcrudelis commented 9 years ago

Si tu as besoin d'aide pour packager, n'hésite pas à me demander. D'autant que ma connexion est rétablie depuis quelques heures.