Heutzutage verwende ich Slim Framework als mein einfachstes Werkzeug, um die PHP-Web-API zu entwickeln.
Ich folge einigen Schritten von dort. Laden Sie das Slim Framework herunter, legen Sie das richtige Verzeichnis und die richtigen Dateien ab. Anpassen der Einleitungsaussagen wie z.
//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
});
Und dann modifiziere ich den Rest entsprechend.
Wie meine Checkliste, die schon gemacht wurde:
RewriteEngine On RewriteCond% {REQUEST_FILENAME}! -F RewriteRule ^ (. *) $ bootstrap.php [QSA, L]
Aber nach einmal führe ich diese Aussage aus;
$app->run();
Und ich lasse es in meinem Browser laufen. Dann habe ich 404 Error beim Testen auf meinem Localhost bekommen. Was ist die Lösung, um das zu beheben?
Zu Ihrer Information, hier ist meine einfachste PHP -Datei, die ich gerade verwende. (gemeinsamer Link)
Das Problem ist gelöst!
Mein Apache ist eigentlich normal, und die .htaccess-Datei, die früher bereitgestellt wurde, ist auch normal.
Der Hinweis ist die URL, die ich verwendet habe. Vorher habe ich die ungültige URL verwendet, so dass der 404-Seitenfehler ausgegeben wurde. Ich habe es gerade bemerkt, als ich versuchte, über diesen Browser auf die neuere GET-URL zuzugreifen.
http://localhost/dev/index.php/getUsers/user1
und jetzt funktioniert das!
Ich habe es erst realisiert, als ich diese Aussagen gefunden hatte;
Wenn Slim keine Routen mit URIs findet, die mit der HTTP-Anforderung übereinstimmen URI, Slim gibt automatisch eine 404 Not Found-Antwort zurück.
Wenn Slim Routen mit URIs findet, die mit dem HTTP-Anforderungs-URI übereinstimmen, jedoch nicht mit Bei der HTTP-Anforderungsmethode gibt Slim automatisch eine 405-Methode zurück Nicht erlaubte Antwort mit einem Allow: -Header, dessen Wert HTTP .__ enthält. Methoden, die für die angeforderte Ressource akzeptabel sind.
Ich habe diesen Beitrag beim Googeln von "slimframework 404" gefunden. Die Post führte mich zu einer Lösung für mein Problem.
Das Problem
Ich habe mit Composer eine Site mit dem Slim-Framework eingerichtet und eine index.php mit dem folgenden Beispielcode von slimframework.com erstellt:
<?php
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
Dann versuche ich die Seite mit http://localhost/hello/bob
aufzurufen. Ich erhalte eine 404-Seite nicht gefunden.
Ich konnte mit http://localhost/index.php/hello/bob
auf die Seite zugreifen.
Die Lösung
Ich habe die Lösung gefunden, indem ich /vendor/slim/.htaccess
(im Lieferumfang von Composer Slim install enthalten) und den Abschnitt URL Rewriting der Dokumentation zum Slim-Framework sah.
Ich habe eine Kopie der /vendor/slim/.htaccess
-Datei im selben Ordner wie meine index.php-Datei hinzugefügt. Der Inhalt der Datei ist:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
Jetzt kann ich mit http://localhost/hello/bob
auf die Seite zugreifen.
Sie können die Datei index.php direkt in Ihre Datei aufnehmen. Dies geschieht jedoch, weil Sie mit Ihrem mod-rewrite .__ nicht richtig arbeiten. Bitte überprüfen Sie den folgenden Link:
https://github.com/codeguy/Slim
Im Abschnitt Erste Schritte können Sie sehen, wie Sie Ihren Server konfigurieren (falls Sie Apache/lighttpd/ngynx verwendet haben).
Für mich bestand das Problem darin, dass ich vergessen hatte, eine .htaccess
-Datei in meinem Dokumentstammverzeichnis anzugeben.
.htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
Ich denke, Ihr Problem liegt beim "Ressourcen-Parser", da Sie bei der Anforderung keinen $ id-Parameter definieren. Versuchen Sie es daher bitte:
//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();
Bitte sagen Sie uns, ob es in Ordnung ist
Wenn Sie Slim auf Ubuntu 16.04 verwenden und der Fehler 404 angezeigt wird. Versuchen Sie diesen Test von Tod Birdsall oben:
Wenn das geht
http: //localhost/index.php/hello/bob
und das funktioniert nicht
und Ihre .htaccess-Datei im selben Verzeichnis wie Ihre index.php und ist wie folgt konfiguriert:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
Und Sie erhalten immer noch den 404-Fehler in Apache.
Aktivieren Sie Apache mod_rewrite wie folgt und starten Sie Apache neu:
$ Sudo a2enmod umschreiben
$ Sudo-Dienst Apache2 neu starten
Die Slim-API sollte jetzt korrekt funktionieren, da die bereitgestellte .htaccess-Datei nur funktioniert, wenn mod_rewrite aktiviert ist und bei einer Neuinstallation nicht die Standardeinstellung ist.
So können Sie mod_rewirte ausschalten, wenn Sie dies benötigen.
$ Sudo a2dismod umschreiben
$ Sudo-Dienst Apache2 neu starten
Für Leute, die immer noch Antworten suchen, weil vorherige nicht funktionieren, funktioniert dies für mich:
RewriteBase /<base_of_your_project>/
Zusätzlich muss das mod_rewrite.so
-Modul in httpd.conf
geladen sein, andernfalls erhalten Sie die Fehlermeldung 500.
LoadModule rewrite_module modules/mod_rewrite.so