2012-03-17 12 views
23

Obecnie używam Slim Framework jako mojego najprostszego narzędzia do rozwijania api webowego php. Wykorzystując te dwa artykuły:Slim Framework zawsze zwraca błąd 404

Śledzę kilka kroków stamtąd. Pobieranie Slim Framework, umieszczanie poprawnych plików katalogu &. Dostosowanie instrukcji początkowych, takich jak;

//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 
}); 

A potem modyfikować resztę odpowiednio.

Taki jak mój checklist że już zrobione:

  • moduły LoadModule rewrite_module/mod_rewrite.so -> włączone
  • Slim .htaccess:

RewriteEngine on RewriteCond% {REQUEST_FILENAME} ! -f RewriteRule ^ (. *) $ bootstrap.php [QSA, L]

Ale po raz biegnę to oświadczenie;

$app->run(); 

I uruchomić go na mojej przeglądarce .... a potem, mam 404 Błąd podczas testowania go na moim localhost. Jakie jest rozwiązanie tego problemu?

FYI, oto mój najprostszy plik PHP, który obecnie go używam. (shared Link)

Odpowiedz

42

Problem został rozwiązany!

Mój apache jest w rzeczywistości normalny, a plik .htaccess dostarczony wcześniej również jest normalny.

Wskazówką jest adres URL, którego użyłem. Poprzednio użyłem nieprawidłowego adresu URL, dlatego zwrócił błąd strony 404. Właśnie zdałem sobie z tego sprawę, gdy próbowałem uzyskać dostęp do nowszego adresu URL GET za pośrednictwem przeglądarki;

http://localhost/dev/index.php/getUsers/user1 

i teraz działa!

Właśnie zdałem sobie z tego sprawę, gdy znalazłem te oświadczenia;

Jeśli Slim nie znajdzie trasy z URI, które pasują do żądania HTTP URI, Slim automatycznie powróci do 404 Not Found odpowiedzi.

Jeśli Slim znajdzie trasy z URI pasujących do żądania HTTP URI ale nie Metoda żądania HTTP, Slim automatycznie powróci do 405 Method Niedozwolona reakcja z Zezwalaj: nagłówek, którego wartość listy HTTP metod, które są do przyjęcia dla żądany zasób.

+9

Właśnie w celu wyjaśnienia problemu, jaki był URL, które staraliśmy się wykorzystać wcześniej? – RPDeshaies

5

Masz rację o włączenie w pliku index.php, ale tak się stało, bo nie pracują poprawnie z mod-rewrite Proszę sprawdzić poniższy link:

https://github.com/codeguy/Slim

w Get Started części można zobaczyć, jak skonfigurować swój serwer (w przypadku, gdy uzywasz Apache/lighttpd/ngynx)

0

Myślę, że problem jest w „zasobami parsera”, ponieważ nie definiują $ id parametr na żądanie, proszę, tr y to:

//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(); 

Proszę nam powiedzieć, czy to ok

21

znalazłem ten post podczas googlowania "slimframework 404". Wpis doprowadził mnie do rozwiązania mojego problemu.

Problem

skonfigurować stronę z Slim ramach korzystania Composer i utworzyć index.php z następującym przykładem postaci kodu slimframework.com:

<?php 
$app = new \Slim\Slim(); 
$app->get('/hello/:name', function ($name) { 
    echo "Hello, $name"; 
}); 
$app->run(); 

Potem próbuję dostęp do strony przy użyciu http://localhost/hello/bob. Otrzymuję stronę 404 Nie znaleziono strony.

Udało mi się uzyskać dostęp do strony za pomocą http://localhost/index.php/hello/bob.

Rozwiązanie

znalazłem rozwiązanie patrząc na /vendor/slim/.htaccess (wliczone w/Kompozytor Slim zainstalować) i odcinek URL Rewriting z Slim dokumentacji ramowej.

Dodałem kopię pliku /vendor/slim/.htaccess do tego samego folderu, co mój plik index.php. Zawartość pliku to:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [QSA,L] 

Teraz mogę przejść na stronę używając http://localhost/hello/bob.

+6

Jeśli proble przetrwa nawet po dodaniu poprawnego pliku '.htaccess', upewnij się, że twój host wirtualny jest skonfigurowany z opcją' AllowOverride', aby można było użyć reguł przepisywania .htaccess: ' \t AllowOverride Wszystko \t Order deny, allow \t Zezwalaj z All \t ' – anj

+0

Hi @cutRateGamer używam AllowOverride Wszystko jednak serwer pokazuje mi błąd 500. –

+1

Tod-Birdsall odpowiedź + ANJ comment = roztworowi – NachPD

0

Dodatkowo moduł mod_rewrite.so musi być załadowany w httpd.conf lub otrzymasz błąd 500.

LoadModule rewrite_module modules/mod_rewrite.so 
1

Dla mnie problemem było to, że zapomniał dostarczyć plik .htaccess w moim korzenia dokumentu.

.htaccess

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . index.php [L] 
0

Jeśli używasz Slim na Ubuntu 16.04 i pojawia się błąd 404. Spróbuj tego testu z Tod Birdsall powyżej:

Jeśli to działa

http://localhost/index.php/hello/bob

i ta praca robi

http://localhost/hello/bob

i plik .htaccess w tym samym katalogu, co plik indeksu. php i jest skonfigurowany w następujący sposób:

<IfModule mod_rewrite.c> 
     RewriteEngine On 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteRule^index.php [QSA,L] 
    </IfModule> 

Nadal pojawia się błąd 404 na Apache.

Spróbuj włączyć mod_rewrite w następujący sposób i zrestartować Apache:

$ sudo a2enmod przepisać

$ sudo service apache2 restart

Slim API powinien działać poprawnie teraz jako dostarczonego pliku .htaccess będzie działa tylko wtedy, gdy mod_rewrite jest włączone i nie jest domyślne w czystej instalacji.

Oto, jak wyłączyć mod_rewirte, jeśli trzeba.

$ sudo a2dismod przepisać

$ sudo service apache2 restart

Powiązane problemy