2012-03-17 2 views
23

In questi giorni sto usando Slim Framework come il mio strumento più semplice per sviluppare php web api. utilizzo di questi due articoli:Slim Framework restituisce sempre 404 Errore

seguo alcuni dei passi da lì. Scaricando Slim Framework, inserendo la directory corretta & file. Regolare le istruzioni di avvio come;

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

E quindi, modifico il resto di conseguenza.

Come ad esempio la mia lista di controllo che già fatto:

  • LoadModule rewrite_module/mod_rewrite.so -> abilitato
  • Slim .htaccess:

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

Ma, dopo Una volta eseguita questa specifica;

$app->run(); 

e corro sul mio browser .... poi, ho avuto 404 Errore durante il test sul mio localhost. Qual è la soluzione per risolverlo?

FYI, ecco il mio file PHP più semplice che attualmente sto usando. (shared Link)

risposta

42

Il problema è risolto!

Il mio apache è in realtà normale e anche il file .htaccess fornito in precedenza era normale.

L'indizio è l'URL che ho usato. Precedentemente ho usato l'URL non valido, quindi ha restituito l'errore di pagina 404. L'ho appena realizzato quando ho cercato di accedere al nuovo URL GET tramite browser con questo;

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

e ora funziona!

L'ho appena capito una volta ho trovato queste affermazioni;

Se Slim non trova vie con URI che corrispondono alla richiesta HTTP URI, Slim torna automaticamente una risposta 404 Not Found.

Se Slim trova percorsi con URI che corrispondono alla richiesta HTTP URI ma non il metodo di richiesta HTTP, Slim torneranno automaticamente un metodo 405 risposta non ammessi con un Consenti: intestazione di cui liste HTTP metodi che sono accettabili per il valore la risorsa richiesta.

+9

Giusto per chiarire il problema, qual è stata l'URL che si stava tentando di usare prima? – RPDeshaies

5

Hai ragione per includere l'index.php sul file, ma che capita perché non stai lavorando correttamente con il mod-rewrite Si prega di verificare il seguente link:

https://github.com/codeguy/Slim

nella parte Inizia si poteva vedere come configurare il vostro server (nel caso in cui si stava utilizzando apache/lighttpd/ngynx)

0

credo che il problema è in "parser risorse" perché non sta definendo $ id parametro alla richiesta quindi, per favore, tr y questo:

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

Prego, ci dica se è ok

21

ho trovato questo post mentre googling "slimframework 404". Il post mi ha portato a una soluzione al mio problema.

Il problema

ho creato un sito con il quadro Slim utilizzando Composer e creare un index.php con il seguente esempio sotto forma di codice slimframework.com:

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

Poi cerco di accedere alla pagina utilizzando http://localhost/hello/bob. Torno alla pagina 404 Pagina non trovata.

Sono riuscito ad accedere alla pagina utilizzando http://localhost/index.php/hello/bob.

La soluzione

ho trovato la soluzione, cercando in /vendor/slim/.htaccess (incluso w/Compositore Slim install) e la sezione URL Rewriting della documentazione quadro Slim.

Ho aggiunto una copia del file /vendor/slim/.htaccess nella stessa cartella del mio file index.php. Il contenuto del file sono:

RewriteEngine On 

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

ora posso accedere alla pagina utilizzando http://localhost/hello/bob.

+6

Se il problema persiste anche dopo aver aggiunto il file '.htaccess' corretto, assicurati che il tuo host virtuale sia configurato con l'opzione' AllowOverride' in modo che le regole di riscrittura .htaccess possano essere usate: ' \t AllowOverride Tutto \t ordine negare, permettono \t Allow from all \t ' – anj

+0

Hi @cutRateGamer, io uso AllowOverride Tutti tranne server di mostrarmi errore 500. –

+1

Tod Birdsall-risposta + anj commento = la soluzione – NachPD

0

Inoltre modulo mod_rewrite.so deve essere caricato in httpd.conf oppure si riceverà l'errore 500.

LoadModule rewrite_module modules/mod_rewrite.so 
1

Per me il problema era che avevo dimenticato di fornire un file .htaccess nel mio principale del documento.

.htaccess

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

Se stai usando Slim su Ubuntu 16.04 e stai ricevendo l'errore 404. Prova questo test da Tod Birdsall sopra:

Se funziona

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

e questo pretende molto lavoro

http://localhost/hello/bob

e il file .htaccess nella stessa directory in cui l'indice. php ed è configurato come segue:

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

E si ottiene ancora l'errore 404 su Apache.

Prova accendere Apache mod_rewrite come segue e riavviare Apache:

$ sudo a2enmod riscrivere

riavvio $ sudo service apache2

L'API Slim dovrebbe funzionare correttamente ora come il file .htaccess fornito volontà funziona solo se mod_rewrite è abilitato e non è il default su un'installazione pulita.

Ecco come disattivare mod_rewirte se è necessario.

$ sudo a2dismod riscrivere

$ sudo service apache2 restart