Acabo de comenzar a aprender el marco de Laravel y tengo un problema con el enrutamiento.
La única ruta que funciona es la ruta de inicio predeterminada que se adjunta a Laravel de fábrica.
Estoy usando WAMP en Windows y usa PHP 5.4.3 y Apache 2.2.22, y también tengo habilitado mod_rewrite y eliminé el 'index.php' del archivo de configuración application.php para dejar una cadena vacía.
Creé un nuevo controlador llamado Usuario :
class User_Controller extends Base_Controller {
public $restful = true;
public function get_index()
{
return View::make('user.index');
}
}
Creé un archivo de vista en application / views / user / llamado index.php con un código HTML básico, y en routes.php agregué lo siguiente:
Route::get('/', function () {
return View::make('home.index');
});
Route::get('user', function () {
return View::make('user.index');
});
La primera ruta funciona bien cuando visito la raíz ( http://localhost/mysite/public
) en mi navegador web, pero cuando intento ir a mi segunda ruta http://localhost/mysite/public/user
, obtengo un error 404 No encontrado. ¿Por qué estaría pasando esto?
Respuestas:
¿Ha intentado agregar esto a su archivo de rutas
Route::get('user', "user@index")
?El trozo de texto antes de que el
@
,user
en este caso, dirigirá la página al controlador usuario y el fragmento de texto después de la@
,index
, dirigirá el guión a lauser
funciónpublic function get_index()
.Veo que estás usando
$restful
, en cuyo caso se podría establecer suRoute
aRoute::any('user', 'user@index')
. Esto manejará ambosPOST
yGET
, en lugar de escribirlos por separado.fuente
En mi instalación de Ubuntu LAMP, resolví este problema con los siguientes 2 cambios.
sudo a2enmod rewrite
.AllowOverride All
Luego reinicie el servidor Apache:
service apache2 restart
fuente
Usando WAMP, haga clic en el icono de wamp -> apache-> módulos de apache-> desplácese y marque rewrite_module Reinicie un LoadModule rewrite_module
Tenga en cuenta que la aplicación del servidor se reinicia automáticamente una vez que habilita "rewrite_module"
fuente
sudo a2enmod rewrite
después de ese reiniciosudo service apache2 restart
¿Ha intentado comprobar si
http://localhost/mysite/public/index.php/user
¿estaba trabajando? Si es así, asegúrese de que todas las carpetas de su ruta no tengan letras mayúsculas. Tuve la misma situación y me ayudó convertir letras a minúsculas.
fuente
api/branches
funcionó, pero en Linux, tuve que cambiar esta url como: ¿index.php/api/branches
Alguna forma de resolver esto para tener las mismas urls?http://localhost/mysite/user
Estaba teniendo el mismo problema al usar EasyPHP. Encontré que tenía que especificar
AllowOverride All
en mi<Directory>
bloque enhttpd.conf
. Sin esto, Apache a veces ignora su.htaccess
.El mío terminó luciendo así ...
<Directory "D:/Dev"> Options FollowSymLinks Indexes #### NEXT IS THE CRUCIAL LINE #### AllowOverride All Order deny,allow Allow from 127.0.0.1 Deny from all Require all granted </Directory>
fuente
Podrías intentar mudarte
root/public/.htaccess
aroot/.htaccess
y debería funcionarfuente
Rutas
Úselos para definir rutas específicas que no son administradas por controladores.
Controladores
Úselos cuando desee utilizar la arquitectura MVC tradicional
Solución a tu problema
No registra controladores como rutas a menos que desee una ruta 'nombrada' específica para una acción de controlador.
En lugar de crear una ruta para las acciones de sus controladores, simplemente registre su controlador:
Route::controller('user');
Ahora que su controlador está registrado, puede navegar
http://localhost/mysite/public/user
yget_index
se ejecutará.También puede registrar todos los controladores de una vez:
fuente
No olvide el "
RewriteBase
" en supublic/.htaccess
:Por ejemplo :
Options +FollowSymLinks RewriteEngine On RewriteBase /your/folder/public
fuente
Bien, después de golpearme la cabeza con este problema durante un poco más de un día ... me levanté e hice lo que DEBÍ haber hecho ayer, ¡y DEPURÉ lo que estaba pasando!
Lo que Laravel está INTENTANDO hacer aquí es insertar el archivo
index.php
justo en frente de la ruta dada como Ruta. Entonces, por ejemplo, si especificó aRoute::get('/account/create', ...,
y ejecutó su aplicación desde decirlocalhost/laravel/authenticate/public/account/create
en su navegador, entonces laravel quiere ejecutarlocalhost/authenticate/public/index.php/account/create
, pero para hacer eso ... Apache necesita ver esas solicitudes/wamp/www/laravel/laravel/authentication/public
(su ruta puede variar un poco, dependiendo de dónde la aplicación laravel está realmente instalada, pero el finalpublic
es donde debe realizarse la sustitución) debe tener una 'RewriteRule' aplicada.Afortunadamente, laravel proporciona la regla de reescritura correcta en un
.htaccess
archivo útil en lapublic
carpeta de tu aplicación . El PROBLEMA es que el código en ese archivo '.htaccess' no funcionará con la forma en que WAMP está configurado de fábrica. La razón de esto PARECE ser el problema sugerido por muvera en la parte superior de este hilo: el código rewrite_module debe ser cargado por Apache antes deRewriteRule
que funcione. Diablos, esto tiene sentido.La parte que NO tiene sentido: simplemente
stopping
yrestarting
los servicios de Apache no recogerán los cambios necesarios para que WAMP haga lo correcto con su RewriteRule. Lo sé, ¡lo intenté muchas veces!¿Qué funciona? Realice los cambios sugeridos por muvera (ver parte superior del hilo) para cargar los módulos correctos. Luego, reinicie toda su sesión de Windows, eliminando así Apache de la memoria por completo. Reinicie (recargue) WAMP y VOILA! la corrección funciona, se aplica la regla RewriteRule correcta, yada, yada; Estoy viviendo feliz para siempre.
La buena noticia de todo esto: Yo sé mucho más acerca de
.htaccess
,RewriteRule
yhttpd.conf
archivos ahora. Existe un buen argumento (de rendimiento) para mover la lógica delpublic
.htaccess
archivo de su aplicación y ponerla en unaDirectory ...
sección de su httpd.conf en su carpeta Apache 'bin' BTW (especialmente si tiene acceso a esa carpeta).fuente
Intente habilitar etiquetas php cortas en su php.ini. WAMP los tiene apagados por lo general y laravel los necesita.
fuente
Route::get('/', function() { return View::make('home.index'); }); Route::get('user', function() { return View::make('user.index'); });
cambiar arriba a
Route::get('user', function() { return View::make('user.index'); }); Route::get('/', function() { return View::make('home.index'); });
Tienes que usar '/' (inicio / predeterminado) al final de tus rutas
fuente
debes estar usando Laravel 5 el comando
class User_Controller extends Controller { public $restful = true; public function get_index(){ return View('user.index'); } }
y en route.php
Route::get('/', function() { return view('home.index'); }); Route::get('user', function() { return view('user.index'); });
Cambios en el comando de Laravel 5 para la vista y el controlador, consulte la documentación. Tenía el mismo error antes
fuente
Simplemente ejecute en su terminal.
fuente
Creo que ha eliminado el archivo .htaccess predeterminado dentro de la carpeta pública de laravel. cargue el archivo, debería solucionar su problema.
fuente
los comandos simples con cargas automáticas las dependencias
y aún entiendo que faltan algunos archivos importantes, así que vaya aquí para ver todo el procedimiento
https://codingexpertise.blogspot.com/2018/11/laravel-new.html
fuente
Si está utilizando Vagrant a través de Homestead, es posible que haya un error al montar la carpeta compartida. Parece que Vagrant toma sus archivos de esa carpeta e intercambia los archivos que realmente están en la máquina host en el arranque, por lo que si hubo un error, esencialmente está tratando de acceder a su instalación de Laravel desde la primera vez que lo hizo (que es por eso que solo obtiene "casa", que se generó durante la instalación).
Puede verificar esto fácilmente ingresando a su vm y verificando el archivo routes / web.php para ver si realmente es su archivo. Si no es así, salir fuera y
vagrant halt
,vagrant up
y buscar errores en el arranque.fuente
index.html
.htaccess
sudo service apache2 restart
lo más probable es que se deba a problemas de caché
fuente
El principal problema de que la ruta no funciona es que hay un módulo mod_rewrite.so en macos, linux no está habilitado en el archivo httpd.conf de la configuración de apache, por lo que .htaccess puede funcionar. He resuelto esto quitando el comentario de la línea:
# LoadModule rewrite_module libexec/apache2/mod_rewrite.so
Quite la
#
línea de arriba dehttpdf.conf
. Entonces funcionará.¡disfrutar!
fuente