2012-03-17 24 views
23

Estos días estoy usando Slim Framework como mi herramienta más simple para desarrollar la API de php. El uso de estos dos artículos:Slim Framework siempre devuelve 404 Error

que siguen algunos de los pasos de allí. Descargando Slim Framework, colocando el directorio correcto & archivos. Ajustar las declaraciones de entrada como;

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

Y luego, modifico el resto en consecuencia.

Tal como mi lista de control que ya está hecho:

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

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

Pero, después Una vez que ejecuta esta sentencia;

$app->run(); 

Y ejecutarlo en mi navegador .... entonces, llegué 404 Error mientras que las pruebas en mi localhost. ¿Cuál es la solución para arreglar eso?

FYI, aquí está mi archivo PHP más simple que lo estoy usando actualmente. (shared Link)

Respuesta

42

Problema está resuelto!

Mi apache es en realidad normal, y el archivo .htaccess proporcionado anteriormente también es normal.

La pista es la URL que utilicé. Anteriormente, utilicé la URL no válida, por lo que devolvió el error de la página 404. Me acabo de dar cuenta cuando intenté acceder a la URL GET más nueva mediante el navegador con esta;

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

y ahora eso funciona.

Me di cuenta una vez que encontré estas declaraciones;

Si Slim no encuentra rutas con URI que coincidan con la solicitud HTTP URI, Slim devolverá automáticamente una respuesta 404 No encontrada.

Si Delgado encuentra rutas con URIs que responden a la petición HTTP URI pero no el método de solicitud HTTP, Delgado volverá automáticamente un método 405 respuesta no permitida con un Permitir: cabecera cuyas listas HTTP métodos que son aceptables para el valor el recurso solicitado.

+9

Solo para aclarar el problema, lo que era la dirección URL que estaban tratando de utilizar antes? – RPDeshaies

5

Tienes razón para incluir el index.php en su archivo, pero eso sucede porque usted no está trabajando correctamente con su mod-rewrite Por favor, compruebe el siguiente enlace:

https://github.com/codeguy/Slim

en la parte Empieza se podía ver cómo configurar el servidor (en el caso de que estuviera usando Apache/lighttpd/ngynx)

0

Creo que su problema está en el "parser" porque no está definiendo $ id parámetro a petición así que, por favor, tr Y esto:

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

Por favor, decirnos si está bien

21

me encontré con este post, mientras que buscando en Google "slimframework 404". La publicación me llevó a una solución a mi problema.

El problema

que creó un sitio con el marco delgado usando Composer y crear un index.php con el siguiente ejemplo de código forma slimframework.com:

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

Entonces trato de accede a la página usando http://localhost/hello/bob. Devuelvo una página 404 Página no encontrada.

Pude acceder a la página usando http://localhost/index.php/hello/bob.

La solución

he encontrado la solución examinado /vendor/slim/.htaccess (incluido w/Compositor Delgado instalar) y la sección de la documentación URL Rewriting marco delgado.

Agregué una copia del archivo /vendor/slim/.htaccess a la misma carpeta que mi archivo index.php. El contenido del archivo son:

RewriteEngine On 

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

Ahora puede acceder a la página utilizando http://localhost/hello/bob.

+6

Si el problema persiste incluso después de agregar el archivo '.htaccess' correcto, asegúrese de que su host virtual esté configurado con la opción' AllowOverride' para que se puedan usar las reglas de reescritura .htaccess: ' \t AllowOverride All \t Orden negar, permiten \t Dejar de todas las \t ' – anj

+0

Hola @cutRateGamer, yo uso AllowOverride Todos menos servidor me mostrar el error 500. –

+1

Tod Birdsall-respuesta + anj comentario = la solución – NachPD

0

Además mod_rewrite.so módulo debe ser cargado en httpd.conf o recibirá el error 500.

LoadModule rewrite_module modules/mod_rewrite.so 
1

Para mí, el problema era que me había olvidado de proporcionar un archivo .htaccess en mi raíz del documento.

.htaccess

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

Si está utilizando Delgado en Ubuntu 16.04 y está obteniendo el error 404. Haga esta prueba de Tod Birdsall arriba:

Si esto funciona

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

y esto no funciona

http://localhost/hello/bob

y su archivo .htaccess en el mismo directorio que el índice. php y se configura de la siguiente manera:

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

Y todavía obtiene el error 404 en Apache.

Trate de encender el mod_rewrite de Apache como sigue y reiniciar Apache:

$ sudo a2enmod reescribir

reinicio $ sudo servicio apache2

La API Delgado debería funcionar correctamente ahora que el archivo .htaccess proporcionada será solo funciona si mod_rewrite está habilitado y eso no es lo predeterminado en una instalación limpia.

Aquí se explica cómo desactivar mod_rewirte si es necesario.

$ sudo a2dismod reescribir

$ sudo service apache2 restart