Bonjour,

Please help me :D

J'ai conçu mon site sur AngularJS (grosse bêtise niveau SEO). Bref, j'utilise bien évidemment des routes pour la gestion de mes pages. Dans la partie front de mon app, j'utilise des fichiers PHP comme template, afin que le contenu soit lisible clairement par les Bots.

Pour ce faire, j'utilise ceci:

$stateProvider.state('job/get', {
      url : '/job/:categories/:employer/:title/:hash',
      templateUrl: function (stateParams){
        return '/partials/job.php?hash=' + stateParams.hash;
      },
      reloadOnSearch: false,
      controller: 'JobCtrl'
    });

Du côté HTACCESS j'ai ceci:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^ index.php [L]

Lorsque je charge ce route dans Chrome comme ceci:

http://domaine.com/job/informatique-ingenierie/ecole-42/ingenieur-phpmysql-confirme-en-cdi-hf-pour-app-angularjs/6c0uot

Tout fonctionne bien. Mais dès que je charge la même page depuis Safari ou Firefox la j'obtiens une erreur 500

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

Avez-vous une idée du problème svp ? Je penses que cela vient du rewrite htaccess, mais incapable de comprendre pourquoi ça fonctionne sur Chrome et pas les autres.

Merci à vous.

4 réponses


kal-el
Réponse acceptée

Qu'est ce qu'il y a dans le log d'Apache au moment de ton erreur ? Aussi concernant le SEO et Angular, tu devrais tenter de jeter un oeil a https://prerender.io/ qui fonctionne tres bien.

Arf, t'as géré. Dans la pa(nic) j'ai carement zapé mes logs. Aie aie aie, je vais mal. C'était une erreur dans un require php.

Concernant prerender.io, ca fonctione, pas tant bien que ca... pour moi ;). Il attend bien le chargement du run de mon app (translate=OK), mais pas celui de mes requetes asynchrone $http executées à partir des ng-init de mes templates. T'as une idée la dessus ? Perso la seule solution trouvé (sur une machine Apache) c'est de charger le contenu de mes pages en PHP avant leur affichage. Comme ça pas trop de risque d'avoir des {{ ... }}. Mais c'est carrement chiant, je dois convertir tout mon code pour la partie Front (ouf ça représente 20%).

Merci encore.

A mon avis le probleme vient peut etre de tes ng-init et du fais que tu charges tes donnees a ce moment la de l'application. Plutot que de charger tes donnees via les ng-init, essai d'utiliser l'injection de dependance dans les routes a l'aide du resolve puis ensuite recuperer le tout dans ton controller qui lui transmettra ces donnees a la vue. C'est generalement ce que je fais et sa fonctionne.
Mais le probleme peut aussi venir de ton .htaccess, a voir.

J'ai testé les "resolve" côté routes, mais il semblerait que cela ne solution pas ce problème (chez moi). Je pense que mon code n'est pas forcement très optimisé. C'était ma première vraie app (front-end) sur AngularJS.

Les dependances type Factory avec des requêtes Ajax sont-elles chargées de manières Synchrone ?