Bonjour.
J'ai une API RestFull fournit par une appli PHP 5.6 sur un Apache 2.4.
Point d'entrée par .htaccess avec mod_rewrite. Un vhost est configuré (voir fin du message).
L'appel a l'api se fait avec le header http Accept:application/json.
Le apache est configuré avec le mime_module et
AddType application/x-httpd-php .php
Je ne suis pas du tout un spécialiste de Apache. La configuration est celle fournie par défaut sur les WampServer3.
Le php exécuté positionne le Content-Type:application/json.
Sauf que si je passe dans le RewriteRule ^.*$ api.php [QSA,L] le php n'est pas du tout exécuté. C'est Apache qui prend la décision de renvoyer la 406.
Il semblerait que lors du passage par le RewriteRule, la vérification du header Accept soit effective alors que si j'appelle directement api.php ce n'est pas le cas.
Pour http://api.localhost/api/v1/sprints + Accept:application/json => 406
Pour http://api.localhost/api/v1/sprints + Accept:application/json,application/x-httpd-php => 200
Pour http://api.localhost/api/v1/sprints + Accept:application/x-httpd-php => 200
Pour http://api.localhost/api.php/api/v1/sprints + Accept:portenaouaque=> 200
Comment faire pour éviter ce changement de comportement ?
Pour une requête http propre je dois indiquer un Accept correcte : comment faire pour que Apache ou plutôt le mode Rewrite accepte le header Accept:application/json alors que visiblement il n'est paramétré que pour renvoyer du application/x-httpd-php ? Il doit pouvoir faire les deux.
Note : j'ai déjà essayé dans le .htaccess
Annexes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <If "%{HTTP_ACCEPT} == 'application/json'"> Header add Content-Type "application/json" </If> ----- ou ------ RewriteRule ^.*$ api.php [QSA,L,T=application/json] ----- ou ------ SetEnvIf Accept "application/json" forceAcceptHeader <IfDefine forceAcceptHeader> Header add Content-Type "application/json" </If>
---- Le .htaccess
----- le vhost
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 AddDefaultCharset UTF-8 <IfModule mod_rewrite.c> Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-s RewriteCond %{REQUEST_URI} ^/api/(.*)$ RewriteRule ^.*$ api.php [QSA,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-s RewriteRule ^.*$ index.php [QSA,L] </IfModule>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <VirtualHost *:80> ServerName api.localhost DocumentRoot c:/applications/webserver/www/_oft/oft2-api/public <Directory "c:/applications/webserver/www/_oft/oft2-api/public/"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require local </Directory> </VirtualHost>
Partager