laravel 4 todas las rutas excepto el hogar dan como resultado un error 404

Solo probando laravel 4 que instalé usando compositor. Tener configurado un servidor virtual. Solo la ruta raíz está funcionando:

Route::get('/', function() { return View::make('hello'); }); 

Incluso esto no está funcionando

 Route::get('/hello', function() { return View::make('hello'); }); 

Lo que trato de hacer es un TasksController at /tasks :

 Route::resource('tasks', 'TasksController'); 

Esto me está dando 404 también.

¿Qué podría estar haciendo mal? Seguí estas instrucciones durante la instalación: http://chris-schmitz.com/getting-started-with-laravel-4/

También tengo un archivo .htaccess predeterminado en la raíz de mi proyecto:

  Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L]  

Estoy en un Mac usando localhost.

Solo por una risa, mira si /index.php/hello funciona.

Si es así, lo más probable es que sea un problema de .htaccess .

Tenía el mismo problema al ejecutar Laravel 4 en WAMP (Windows 8).
La solución que funcionó para mí fue:

  1. Abra apache httpd.conf y encuentre esta línea:

     #LoadModule rewrite_module modules/mod_rewrite.so 
  2. Descomenta esta línea (elimina el # )
  3. Guardar httpd.conf
  4. Reiniciar WAMP

Debería estar funcionando!

Tuve el mismo problema y la solución fue habilitar el mod de reescritura en Apache2

En una terminal, use los siguientes comandos:

 $ sudo a2enmod rewrite $ sudo service apache2 restart 

¡Y magia!

Tenía exactamente el mismo problema.

Dos cosas que tenía que hacer para arreglar esto:

  1. habilitar rewrite_module en Apache
  2. Cambie AllowOverride de None a All , ejemplo (Apache 2.4.9):

    Índices de opciones FollowSymLinks MultiViews AllowOverride All Requerir todos concedidos

FYI: utilice Laravel Homestead junto con VirtualBox y Vagrant en lugar de WAMP. Contiene Nginx en lugar de Apache, pero todo funciona de manera predeterminada ya que está configurado explícitamente para Laravel.

Incluso después de habilitar mod_rewrite, puede enfrentar este problema si está creando alias su carpeta laravel / public.

Añadiendo

 RewriteBase /your_apache_alias 

para .htaccess hace el truco.

No necesita a / al definir nada más que el hogar:

 Route::get('hello', function() { return View::make('hello'); }); 

Deberia trabajar.

Dado que Laravel 4 está cargando automáticamente los archivos de un mapa en un archivo estático, debe actualizar ese archivo cuando agrega un nuevo controlador. Ejecute este comando para reconstruir el archivo estático:

 php composer.phar dump-autoload 

Tuve este problema (en Windows con Apache 2.2 instalado manualmente), y la causa era una AllowOverride perdida en mi VirtualHost ya que el directorio raíz en httpd.conf estaba predeterminado en Ninguno.

FileInfo Options=MultiViews es el conjunto mínimo que necesitas para .htaccess de Laravel

p.ej

  DocumentRoot "C:/htdocs/domain.com/laravel/public" ServerName foo.domain.com  AllowOverride FileInfo Options=MultiViews   

O use AllowOverride All si esto no funciona y no le importa la seguridad.

Está bastante claro que el problema aparece debido al “mod_rewrite”, en algunos casos basta con habilitar este módulo en Apache para solucionarlo.

Sin embargo, en mi caso, tuve que extender la configuración de VirtualHost de la siguiente manera:

  ServerName adplus.local ServerAdmin sergey.donchenko@gmail.com DocumentRoot /var/www/adplus.local/project/public ** AllowOverride All ** ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined  

Intenté todo esto sin éxito, luego encontré otra publicación y cambié mi .htaccess a esto:

  Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ /index.php [L]  

Es como @GaryJ y @MartinGomez dijeron. Este es el contenido del .htaccess que debe establecerse en la carpeta pública para todos sus proyectos laravel 4 que se ejecutan en el servidor Apache:

   Options -MultiViews  RewriteEngine On RewriteBase / # Redirect Trailing Slashes... RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L]