Ces jours-ci, j'utilise Slim Framework comme étant mon outil le plus simple pour développer une application web php . À l'aide de ces deux articles:
Je suis certaines des étapes à partir de là. Télécharger le Slim Framework, mettre le bon répertoire et les fichiers. Ajuster les instructions initiales telles que;
//1. Require Slim
require('Slim/Slim.php');
//2. Instantiate Slim
$app = new Slim();
//3. Define routes
$app->get('/books', function ($id) {
//Show book with id = $id
});
Et puis, je modifie le reste en conséquence.
Telles que ma liste de contrôle que déjà fait:
RewriteEngine On RewriteCond% {REQUEST_FILENAME}! -F RewriteRule ^ (. *) $ bootstrap.php [QSA, L]
Mais, après une fois, je lance cette déclaration;
$app->run();
Et je l’exécute sur mon navigateur .... alors, j’ai eu l’erreur 404 lors du test sur mon hôte local. Quelle est la solution pour résoudre ce problème?
Pour votre information, voici mon fichier le plus simple PHP que je l’utilise actuellement. (lien partagé)
Problème résolu!
Mon Apache est en fait normal, et le fichier .htaccess fourni plus tôt est également normal.
L'indice est l'URL que j'ai utilisée . Auparavant, j'utilisais l'URL invalide, donc il renvoyait l'erreur de page 404 .
http://localhost/dev/index.php/getUsers/user1
et maintenant ça marche!
Je viens de m'en rendre compte une fois que j'ai trouvé ces déclarations;
Si Slim ne trouve pas de routes avec des URI correspondant à la requête HTTP URI, Slim renverra automatiquement une réponse 404 non trouvée.
Si Slim trouve des routes avec des URI correspondant à l'URI de la requête HTTP mais pas la méthode de requête HTTP, Slim renverra automatiquement un 405 Method Réponse non autorisée avec un en-tête Allow: dont la valeur répertorie HTTP méthodes acceptables pour la ressource demandée.
J'ai trouvé ce post en recherchant "slimframework 404" sur Google. La poste m'a amené à une solution à mon problème.
Le problème
J'ai créé un site avec le framework Slim à l'aide de Composer et créé un index.php avec l'exemple de code suivant, slimframework.com:
<?php
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
Ensuite, j'essaie d'accéder à la page en utilisant http://localhost/hello/bob
. Je récupère une page 404 page non trouvée.
J'ai pu accéder à la page en utilisant http://localhost/index.php/hello/bob
.
La solution
J'ai trouvé la solution en consultant /vendor/slim/.htaccess
(inclus avec l'installation de Composer Slim) et la section URL Rewriting de la documentation de l'infrastructure Slim.
J'ai ajouté une copie du fichier /vendor/slim/.htaccess
dans le même dossier que mon fichier index.php. Le contenu du fichier est:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
Maintenant, je peux accéder à la page en utilisant http://localhost/hello/bob
.
Vous avez raison sur le point d'inclure le fichier index.php dans votre fichier, mais cela est dû au fait que vous ne travaillez pas correctement avec votre mod-réécriture.
https://github.com/codeguy/Slim
Dans la partie Mise en route, vous pouvez voir comment configurer votre serveur (si vous utilisiez Apache/lighttpd/ngynx)
Pour moi, le problème était que j'avais oublié de fournir un fichier .htaccess
dans la racine de mon document.
.htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
Je pense que votre problème se situe au niveau de "l'analyseur de ressources" car vous ne définissez pas le paramètre $ id à la demande. Essayez donc ceci:
//1. Require Slim
require('Slim/Slim.php');
//2. Instantiate Slim
$app = new Slim();
//3. Define routes
$app->get('/books/:id/', function ($id) {
echo json_encode( getBook($id) );
});
// some stuff
$app->run();
S'il vous plaît, dites-nous si ça va
Si vous utilisez Slim sur Ubuntu 16.04 et que vous obtenez l'erreur 404. Essayez ce test de Tod Birdsall ci-dessus:
Si cela fonctionne
http: //localhost/index.php/hello/bob
et ça ne marche pas
et votre fichier .htaccess dans le même répertoire que votre index.php et est configuré comme suit:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
Et vous obtenez toujours l'erreur 404 sur Apache.
Essayez d’activer Apache mod_rewrite comme suit et redémarrez Apache:
$ Sudo a2enmod rewrite
$ Sudo service Apache2 redémarrer
L'API Slim devrait maintenant fonctionner correctement car le fichier .htaccess fourni ne fonctionnera que si mod_rewrite est activé et que ce n'est pas celui par défaut lors d'une installation propre.
Voici comment désactiver mod_rewirte si vous en avez besoin.
$ Sudo a2dismod rewrite
$ Sudo service Apache2 redémarrer
Pour les personnes qui recherchent toujours des réponses parce que les précédentes ne fonctionnent pas, cela fonctionne pour moi
RewriteBase /<base_of_your_project>/
De plus, le module mod_rewrite.so
doit être chargé dans httpd.conf
ou vous recevrez l'erreur 500.
LoadModule rewrite_module modules/mod_rewrite.so