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
@,useren este caso, dirigirá la página al controlador usuario y el fragmento de texto después de la@,index, dirigirá el guión a lauserfunciónpublic function get_index().Veo que estás usando
$restful, en cuyo caso se podría establecer suRouteaRoute::any('user', 'user@index'). Esto manejará ambosPOSTyGET, 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 AllLuego reinicie el servidor Apache:
service apache2 restartfuente
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 rewritedespué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/branchesfuncionó, pero en Linux, tuve que cambiar esta url como: ¿index.php/api/branchesAlguna forma de resolver esto para tener las mismas urls?http://localhost/mysite/userEstaba teniendo el mismo problema al usar EasyPHP. Encontré que tenía que especificar
AllowOverride Allen 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/.htaccessaroot/.htaccessy 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/useryget_indexse 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/publicfuente
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.phpjusto 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/createen 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 finalpublices donde debe realizarse la sustitución) debe tener una 'RewriteRule' aplicada.Afortunadamente, laravel proporciona la regla de reescritura correcta en un
.htaccessarchivo útil en lapubliccarpeta 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 deRewriteRuleque funcione. Diablos, esto tiene sentido.La parte que NO tiene sentido: simplemente
stoppingyrestartinglos 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,RewriteRuleyhttpd.confarchivos ahora. Existe un buen argumento (de rendimiento) para mover la lógica delpublic.htaccessarchivo 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 upy buscar errores en el arranque.fuente
index.html.htaccesssudo service apache2 restartlo 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.soQuite la
#línea de arriba dehttpdf.conf. Entonces funcionará.¡disfrutar!
fuente