routing - array - route destroy laravel
laravel 4 todas las rutas excepto el hogar dan como resultado un error 404 (17)
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:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Estoy en un Mac usando localhost.
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
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:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
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]
</IfModule>
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:
<VirtualHost *:80>
ServerName adplus.local
ServerAdmin [email protected]
DocumentRoot /var/www/adplus.local/project/public
**<Directory "/var/www/adplus.local/project/public">
AllowOverride All
</Directory>**
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Esta actualización funcionó para mí. En el archivo .htaccess simplemente agregue lo siguiente después de encender las Regrabaciones.
Options -Indexes
Options +FollowSymLinks
Funcionó como el encanto
Este comentario puede ser un poco tarde pero puede ayudar. Tuve el mismo problema al enrutar a otra vista como esta:
Route::get(''index'', function () {
return view(''index'');
});
Route::get(''login'', function () {
return view(''login'');
});
Pero no funcionó, así que intenté todo lo que encontré en todas las publicaciones relacionadas, pero no fue suficiente para resolver mi problema, así que encontré estas líneas en el httpd.conf:
<Files ".ht*">
Require all denied
</Files>
Así que cambié "denegado" a "concedido" y también comenté esta línea en mi .htaccess:
#RewriteBase /
¡Y funcionó! Creo que estas líneas hacen que Apache no tenga en cuenta el archivo .htaccess de su proyecto, por lo que convertirlo en un hecho hizo la diferencia. Espero que esto pueda ayudar a alguien con el mismo problema.
Trabajando en Apache Server 2 @ Manjaro Linux (basado en Archlinux)
Hubo un pequeño error en una respuesta anterior. Esto podría ayudar.
$ sudo a2enmod rewrite
$ sudo service apache2 restart
Espero que sí.
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.
Intenté todo esto sin éxito, luego encontré otra publicación y cambié mi .htaccess a esto:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [L]
</IfModule>
Ir
nano / etc / nginx / sites-available / yoursite
encuentre try_file y reemplace de la siguiente manera:
try_files $uri $uri/ /index.php?$query_string;
No necesita a / al definir nada más que el hogar:
Route::get(''hello'', function()
{
return View::make(''hello'');
});
Deberia trabajar.
Para los usuarios de Nginx, probablemente haya copiado el servidor virtual default
, pero Laravel requiere cierta personalización en la directiva de location
para permitir que la aplicación Laravel haga el enrutamiento y no Nginx.
En su /etc/nginx/sites-available/your-site-name
reemplace la directiva de ubicación con esto:
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
Luego ejecute sudo service nginx reload
para que los cambios entren en vigencia.
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:
Abra apache httpd.conf y encuentre esta línea:
#LoadModule rewrite_module modules/mod_rewrite.so
- Descomenta esta línea (elimina el
#
) - Guardar
httpd.conf
- Reiniciar WAMP
Debería estar funcionando!
Tenía exactamente el mismo problema.
Dos cosas que tenía que hacer para arreglar esto:
- habilitar rewrite_module en Apache
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.
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!
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
<VirtualHost *:80>
DocumentRoot "C:/htdocs/domain.com/laravel/public"
ServerName foo.domain.com
<Directory "C:/htdocs/domain.com/laravel/public">
AllowOverride FileInfo Options=MultiViews
</Directory>
</VirtualHost>
O use AllowOverride All
si esto no funciona y no le importa la seguridad.
Tuve un problema similar en Ubuntu 14.04 con Lumen 5.4.
La solución fue dos partes para mí. Primero en mi archivo /etc/apache2/sites-enabled/my_vhost.conf
, tuve que agregar la siguiente entrada <Directory>
para permitir modificaciones, después de declarar mi DocumentRoot
:
DocumentRoot /var/www/path/to/my/app/public
<Directory "/var/www/path/to/my/app/public">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Luego, tuve que habilitar las reescrituras con:
sudo a2enmod rewrite
sudo service apache2 restart