J’ai la structure httpd suivante:
c:/ xampp/ htdocs/ mysite/ bower_components/ app/ index.html app.js views/ api/ index.php .htaccess
Dans le dossier de l’ app
, j’ai mon code d’application: HTML, JS, CSS, etc. En d’autres termes, mon frontal.
Dans le dossier api
, j’ai mon api PHP REST: index.php
. En d’autres termes, mon backend.
Comme je l’ai dit, j’utilise AngularJS
et je voudrais activer html5Mode
pour avoir une URL plus propre.
Je parviens à mettre juste l’interface pour travailler avec la configuration suivante dans Apache:
NameVirtualHost *:8081 ServerName localhost:8081 DocumentRoot "C:/xampp/htdocs/mysite/app" Alias "/bower_components" "C:/xampp/htdocs/mysite/bower_components" RewriteEngine on # Don't rewrite files or directories RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # Rewrite everything else to index.html to allow html5 state links RewriteRule ^ index.html [L]
Avec la configuration ci-dessus, je peux exécuter mon frontend comme un charme. http://localhost:8081
me conduit à index.html
et tous mes états dans mon $stateProvider
sont également résolus.
Mais mes appels d’API échouent et je ne sais pas quoi faire.
J’ai le service REST suivant dans mon index.php
:
require 'vendor/autoload.php'; // Create Router instance $router = new \Bramus\Router\Router(); $router->get('/cart/items', function() { echo '{"items":[ {"name":"item1"}, {"name":"item2"} ]}'; }); // Run the Router $router->run();
Quand j’appelle de mon frontend:
$http({ url: '/api/cart/items', method: 'GET' }).then(function (response) { // do stuff... }, function (error) { alert(error.data); });
L’appel tombe dans la règle de réécriture pour index.html. Tous mes appels d’API répondent à l’index.html.
Dans mon dossier api, j’ai le fichier .htaccess
suivant:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L] Options -Indexes
J’ai déjà essayé de mettre un Alias
dans la configuration Apache pour le dossier api
, mais le résultat était le même.
J’ai même essayé de C:/xampp/htdocs/mysite
mon DocumentRoot
vers C:/xampp/htdocs/mysite
. De cette façon, mes appels à l’API sont résolus mais lorsque mysite
http://localhost:8081
je reçois la liste des fichiers et dossiers de mysite
.
Il semble si proche et pourtant si loin. J’espère que vous pouvez m’éclairer.