ocultar - ¿Cómo puedo eliminar "public/index.php" en el laravel generado por la URL?
laravel public folder not accessible (14)
Básicamente necesito eliminar index.php
o public/index.php
de la URL generada en laravel, comúnmente la ruta es localhost/public/index.php/someWordForRoute
, debería ser algo como localhost/someWordForRoute
htacces
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php[L]
app / config / app.php
''url'' => ''http://localhost'',
¿Cómo puedo cambiar eso?
Opción 1: Usar .htaccess
Si aún no está allí, cree un archivo .htaccess en el directorio raíz de Laravel. Cree un archivo .htaccess
su directorio raíz de Laravel si aún no existe. (Normalmente está debajo de su carpeta public_html
)
Edite el archivo .htaccess para que contenga el siguiente código:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Ahora debería poder acceder al sitio web sin la parte "/public/index.php/".
Opción 2: mover cosas en el directorio ''/ public'' al directorio raíz
Cree una nueva carpeta en su directorio raíz y mueva todos los archivos y la carpeta excepto la carpeta pública. Puedes llamarlo como quieras. Usaré "laravel_code".
A continuación, mueva todo fuera del directorio público y dentro de la carpeta raíz. Debería dar como resultado algo similar a esto:
Después de eso, todo lo que tenemos que hacer es editar las ubicaciones en el laravel_code/bootstrap/paths.php
y el archivo index.php
.
En laravel_code/bootstrap/paths.php
encuentra la siguiente línea de código:
''app'' => __DIR__.''/../app'',
''public'' => __DIR__.''/../public'',
Y cámbialos a:
''app'' => __DIR__.''/../app'',
''public'' => __DIR__.''/../../'',
En index.php
, encuentra estas líneas:
require __DIR__.''/../bootstrap/autoload.php'';
$app = require_once __DIR__.''/../bootstrap/start.php'';
Y cámbialos a:
require __DIR__.''/laravel_code/bootstrap/autoload.php'';
$app = require_once __DIR__.''/laravel_code/bootstrap/start.php'';
1) Compruebe si mod_rewrite está habilitado. Vaya al directorio /etc/apache2/mods-enabled
y vea si rewrite.load
está disponible. Si no, habilítelo usando el comando sudo a2enmod rewrite
. Habilitará el módulo de reescritura. Si ya está habilitado, mostrará el mensaje Module rewrite already enabled
.
2) Cree un host virtual para el directorio público para que, en lugar de dar http://localhost/public/index.php
podamos usar el siguiente http://example.com/index.php
. [por lo tanto, el nombre de la carpeta pública se ocultará]
3) A continuación, cree un .htaccess que ocultará el index.php de su url que debe estar dentro del directorio raíz (carpeta pública)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
AQUÍ HAY PASOS SIMPLES PARA ELIMINAR EL PÚBLICO EN LA URL (Laravel 5)
1: copie todos los archivos de la carpeta pública y páselos en la carpeta raíz laravel
2: Abra index.php y cambie
De
require __DIR__.''/../bootstrap/autoload.php'';
A
require __DIR__.''/bootstrap/autoload.php'';
Y
$app = require_once __DIR__.''/../bootstrap/app.php'';
A
$app = require_once __DIR__.''/bootstrap/app.php'';
En laravel 4, la ruta 2 es $app = require_once __DIR__.''/bootstrap/start.php'';
en lugar de $app = require_once __DIR__.''/bootstrap/app.php'';/app.php
Eso es.
Acabo de instalar Laravel 5 para un proyecto y hay un archivo en la raíz llamado server.php. Simplemente cámbialo a index.php y funciona o en terminal, escribe
$ cp server.php index.php
Cambie el nombre de server.php en la carpeta raíz de Laravel a index.php y copie el archivo .htaccess del directorio / public en la carpeta raíz de Laravel. -- Eso es !! :)
Es probable que esto tenga muy poco que ver con Laravel y todo lo relacionado con las configuraciones de Apache.
¿Tiene acceso a la configuración de su servidor Apache? Si es así, mira esto desde los documentos:
En general, solo debe usar archivos .htaccess cuando no tenga acceso al archivo de configuración del servidor principal. Existe, por ejemplo, un concepto erróneo común de que la autenticación del usuario siempre debe hacerse en archivos .htaccess y, en años más recientes, otro error al que las directivas mod_rewrite deben ir en los archivos .htaccess. Esto simplemente no es el caso. Puede poner configuraciones de autenticación de usuario en la configuración del servidor principal, y esta es, de hecho, la forma preferida de hacer las cosas. Del mismo modo, las directivas mod_rewrite funcionan mejor, en muchos aspectos, en la configuración del servidor principal.
... En general, el uso de archivos .htaccess debe evitarse cuando sea posible. Cualquier configuración que considere incluir en un archivo .htaccess, puede hacerse con la misma eficacia en una sección en su archivo de configuración del servidor principal.
Fuente: documentación de Apache .
La razón por la que menciono esto primero es porque lo mejor es deshacerse de .htaccess
completo si puede, y usar una etiqueta de Directory
dentro de una etiqueta de VirtualHost
. Una vez dicho esto, el resto de esto asumirá que se está apegando a la ruta .htaccess
por cualquier razón.
Para romper esto, un par de cosas podrían estar sucediendo:
Noto, quizás inútilmente, que su archivo se llama
.htacces
en su pregunta. Supongo que es un error tipográfico, pero en caso de que lo pasaras por alto y de hecho solo te falta el segundo, este es exactamente el tipo de error menor que me dejaría golpeándome la cabeza contra la pared en busca de algo más desafiante .Su servidor no podría permitir
.htaccess
. Para verificar esto, vaya a su archivo de configuración de Apache. En las compilaciones modernas de Apache esto generalmente no está en un archivo de configuración, así que asegúrese de estar utilizando el que apunta a su aplicación, donde sea que exista. CambioAllowOverride none
a
AllowOverride all
Como seguimiento, los documentos de Apache también recomiendan que, por razones de seguridad, no haga esto para todas las carpetas si va a buscar
.htaccess
para volver a escribir. En cambio, hazlo para las carpetas a las que necesitas agregar.htaccess
.¿Tienes
mod_rewrite
habilitado? Eso podría estar causando los problemas. Noté que tienes la etiqueta en la parte superior<IfModule mod_rewrite.c>
. Intente comentar esas etiquetas y reinicie Apache. Si obtienes un error, es probable que sea porque necesitas habilitarmod_rewrite
: Cómo habilitar mod_rewrite para Apache 2.2
Espero que esto ayude. He mencionado algunos de los problemas más comunes, pero hay otros que podrían ser más mundanos o únicos. ¿Otra sugerencia en un servidor de desarrollo? Reinstala Apache. Si es posible, hágalo de una fuente diferente con un buen tutorial.
Espero que esto ayude como lo hizo por mí.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Intenté esto en Laravel 4.2
Cambie el nombre de server.php
en la carpeta raíz de Laravel a index.php
y copie el archivo .htaccess
del directorio /public
en la carpeta raíz de Laravel.
espero que funcione
Laravel se envía con una bonita URL .htaccess ya ... deberías ser bueno para salir de la caja ... http://laravel.com/docs/installation#pretty-urls
Asegúrese de que mod_rewrite esté habilitado y que su ruta de inicio esté configurada en el directorio público de su aplicación.
No te confundas con otra opción, el fragmento de más abajo que estoy usando te será útil también. Coloque las htacces a continuación en su raíz.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
Vaya a su directorio público y coloque otro archivo htaccess con el siguiente fragmento de código:
<IfModule mod_rewrite.c>
RewriteEngine On
# Removes index.php from ExpressionEngine URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>
Esta funcionando... !!!
Según Laravel 5.3, las cosas anteriores no funcionarán correctamente, pero por favor, mantén la calma y sigue los pasos a continuación:
Paso 1. Ir al interior del proyecto laravel
Paso 2. Haz un directorio / carpeta aleatorio, por ej. laravelcode
Paso 3. Mueva todas las carpetas y archivos (excepto la carpeta pública )
Paso 4. Mueva toda la carpeta y los archivos que están dentro de la carpeta pública al proyecto laravel
Paso 5. Ahora dentro del proyecto laravel hay un archivo index.php, por favor ábralo y cambie las rutas de carpetas para bootstrap según una nueva ruta como anteriormente era "requerir DIR . ''/ .. / bootstrap / autoload.php'';" ahora se convertirá en "requerir DIR . ''/ laravelcode / bootstrap / autoload.php'';"
Eso es solo ejecutar su url sin public y index.php como a continuación http://localhost/blog/
Para Laravel 4 y 5:
- Cambie el nombre de server.php en su carpeta raíz Laravel a index.php
- Copie el archivo .htaccess del directorio / public en su carpeta raíz de Laravel.
Eso es !! :)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
utilízalo en .htaccess y reinicia el servidor
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/(public)/(index.php)/$ $1/$4 [L]
</IfModule>