Cómo instalar Laravel 4 en una subcarpeta de host web sin exponer públicamente /app/ folder?


Me preguntaba si alguno de ustedes conoce una forma de instalar Laravel 4 en un SUBDIRECTORIO / subcarpeta de host web sin exponer la carpeta /app/ y otros archivos sensibles a la parte públicamente accesible del host.

La idea es, sería capaz de acceder http://mydomain.com/mylaravel / para poder usar Laravel, pero al mismo tiempo quiero evitar que alguien haga algo como ir a http://mydomain.com/app / o http://mydomain.com/mylaravel/app / y básicamente poder ver mis archivos de configuración y otro código.

Author: Antonio Carlos Ribeiro, 2013-05-22

9 answers

Así que descubrí cómo hacer esto. Lo explicaré con un ejemplo.

Supongamos que un dominio, http://domain.com . Aquí hay un ejemplo de la estructura que podría estar utilizando:

domain.com/    (the root of your web hosting)
|-- yourlaravel4_base/
|-- [some other folders...]
|-- public_html/    (where your html files and such go)
|   |-- [some other folders...]
|   |-- yourlaravel4/

/public_html/ es la raíz de la parte de acceso público de sus archivos de alojamiento web. Desea crear una subcarpeta en /public_html/ (en este caso /public_html/yourlaravel4/). En esta subcarpeta almacenará todos los contenidos de la carpeta Laravel 4 public/.

Ahora, para el resto de los archivos. Usted tiene que ir a la raíz de sus archivos de alojamiento web, es decir, quiere estar en el nivel domain.com/, por lo tanto, ser capaz de ver public_html/ y algunas otras carpetas. Luego, necesitamos crear una carpeta aquí, donde se almacenarán los archivos base de Laravel 4. En este caso, es domain.com/yourlaravel4_base/. Dentro de yourlaravel4_base/ necesitamos almacenar todos los archivos y carpetas que existen en el directorio base Laravel 4. Que sería app/, bootstrap/, vendor/, server.php, etc. Todo EXCEPTO la carpeta /public/, cuyo contenido ya ha almacenado public_html/yourlaravel4/.

Finalmente, necesitamos editar 2 archivos: los de Laravel /bootstrap/paths.php y /public/index.php.


En el archivo paths.php, sustitúyase:

'app' => __DIR__.'/../app',

Con:

'app' => __DIR__.'/../../yourlaravel4_base/app',

En el archivo paths.php, sustitúyase:

'public' => __DIR__.'/../public',

Con:

'public' => __DIR__,

En el archivo paths.php, sustitúyase:

'base' => __DIR__.'/..',

Con:

'base' => __DIR__.'/../../yourlaravel4_base',

En paths.php, sustitúyase:

'storage' => __DIR__.'/../app/storage',

Con:

'storage' => __DIR__.'/../../yourlaravel4_base/app/storage',

En index.php, sustitúyase:

require __DIR__.'/../bootstrap/autoload.php';

Con:

require __DIR__.'/../../yourlaravel4_base/bootstrap/autoload.php';

En index.php, sustitúyase:

$app = require_once __DIR__.'/../bootstrap/start.php';

Con:

$app = require_once __DIR__.'/../../yourlaravel4_base/bootstrap/start.php';

Cambios en la carga. Ahora debería poder tener Laravel 4 instalado en una subcarpeta de su sitio web sin exponer realmente la carpeta app/ y otros archivos confidenciales. :)

 63
Author: Emmanuel Figuerola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-16 07:48:56

Puede usar un alias: no hankey-pankey con directorios extendidos en su sistema.

Especifique en su httpd.conf o panel de administración:

/mylaravel/ /path/to/laravel/public

Además, especifique la URL en la aplicación de su Laravel.php

Línea 29

'url' => 'http://yourdomain.com/mylaravel/',

Finalmente establece la RewriteBase en tu /public/.htaccess

RewriteBase /mylaravel/

Funciona como un encanto y mantiene su estructura de directorios limpia y al grano!

 28
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-23 15:32:26

¡Gente, gente! No hay necesidad de complicar las cosas!

(Para otras carpetas públicas, como htdocs o www simplemente reemplace public_html en la siguiente con la suya.)

  1. Ponga todas sus cosas de Laravel en la carpeta de nivel superior (de modo que la carpeta app esté al lado de la carpeta public_html)
  2. Mueva todos los archivos de public a public_html (asegúrese de mover también los archivos ocultos, como .htaccess!)
  3. Elimina la carpeta ahora vacía public
  4. En bootstrap/path.php cambio

    'public' => __DIR__.'/../public', a

    'public' => __DIR__.'/../public_html',

  5. Hecho.
 7
Author: sisou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-08 02:14:46

La respuesta de Emmanuel no funciona para mí, pero hice algunos cambios para que funcionara . aunque usé mi raíz web para ser la fuente de un proyecto . ahí está. ; tengo la carpeta htdocs como una carpeta raíz, pero puede tener otra, como public_html, www, etc. puede reemplazar fácilmente mis htdocs con el que tiene .

Bien .

Mi dircetory

root/ 
      htdocs
      .htaccess
      .override

Primero resolví todas las dependencias de laravel en mi localhost en Windows con composer . después de eso hice las maletas. todo el paquete en laravel4.Postal . en mi htdocs creo una carpeta laravel y subí y descomprimí el archivo zip en ella.

htdocs/
        laravel/
                 app
                 bootstrap
                 public 
                 vendors
                 ...

Así que después de descomprimir el archivo muevo todo en la carpeta pública a la carpeta htdocs

htdocs/
        laravel
        packages
        .htaccess
        favicon.ico
        index.php
        robots.txt

Ahora tenemos que reescribir algunas rutas en htdocs/index.php y htdocs / laravel / bootstrap / paths.php

Pero permite abrir htdocs/laravel/bootstrap/paths.php . verías

'app' => __DIR__.'/../app',

¿Qué significa . significa que estamos de pie en htdocs / laravel/ bootstrap / path . y allí para que necesitamos salir de esta carpeta a la carpeta laravel y luego ir a la carpeta de la aplicación . ok . esta es la estructura del laravel para enrutamiento . si lo haces bien, puedes hacer que Laravel corra .

Buscar

'public' => __DIR__.'/../public',

Y cambiarlo a

'public' => __DIR__.'/../../htdocs',

(ha simple ) con uno (../) de estos, podemos subir una carpeta . así que ahora estamos en la carpeta Laravel . pero necesitamos estar en htdocs . así que tenemos que escribir otro (../) para llegar allí .

Abra htdocs/index.php y buscar

require __DIR__.'/../bootstrap/autoload.php';

Cámbialo por

require 'laravel/bootstrap/autoload.php'; 

Require es una función php incorporada, por lo que vamos a tratarla como un php simple . realmente no necesitamos el estilo laravel para obtener la carga automática.archivo php . así que simplemente quitarlo y ir para el estilo clásico

Buscar

$app = require_once __DIR__.'/../bootstrap/start.php';

Cámbialo por

$app = require_once 'laravel/bootstrap/start.php';
 3
Author: HMG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-22 14:36:16

Si está tratando de ejecutar Laravel 5.1 en un espacio de alojamiento compartido y todas las respuestas anteriores parecen ser un poco diferentes de los archivos/carpetas reales de Laravel o está buscando cómo poner su laravel 5/5.1 en un subdirectorio en su espacio de alojamiento compartido para que pueda acceder a él de esta manera:

http://mywebsite.com/mylaravel/

Así que esta respuesta es para usted, en primer lugar, asegúrese de cumplir

Requisitos de Laravel 5.1:

- PHP 5.5
- PHP extension Mcrypt
- PHP extension Mbstring
- PHP extension OpenSSL

Aquí un fácil dos tutoriales para usted :

Enlace 1

Link 2

 2
Author: Mohamed Salem Lamiri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-25 09:45:56

Si está utilizando el asistente addondomain o subdomaind en su panel ,el asistente debe pedirle la raíz del documento . por ejemplo, quiero añadir droidman.com , asistente debe sugerirme con hacer droidman.com carpeta . en este paso dile al asistente que haga droidman.com/public carpeta . a continuación, ponga su aplicación en droidman.com carpeta . tu anfitrión mirará la carpeta pública ;) . problema resuelto

 1
Author: HMG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-10 20:16:46

Si simplemente desea configurar el proyecto Laravel en alojamiento compartido y tiene acceso a cPanel, puede seguir los pasos que he seguido y funcionó bien.

Paso 1 : Haga un archivo zip o tar de toda su aplicación Laravel en su máquina local.

Paso 2 : Vaya a Cpanel. Cargue el archivo zip / tar en el directorio public_html y luego extráigalo. (También puede crear una carpeta separada para su aplicación laravel. Como quiero subir más de una aplicaciones Laravel I han creado un directorio separado para cada uno como se muestra en la imagen de abajo.)

introduzca la descripción de la imagen aquí

Paso 3 : Ahora vaya a 'Addon Domain' y cambie la raíz del documento de su dominio especificado. Apunte el dominio a la carpeta pública.

introduzca la descripción de la imagen aquí

Ahora revise su dominio que redirigirá a public/index.archivo php. No hay necesidad de cambiar ningún camino.

 1
Author: Sumit Patil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-08 13:26:59

Si está utilizando un servidor apache, la forma más sencilla de hacerlo es alojar su aplicación Laravel fuera de la raíz www (o en una carpeta protegida en la raíz www) y luego enlazar simbólicamente la subcarpeta deseada para que apunte a la carpeta pública en laravel

Por ejemplo, coloco mis instalaciones laravel en:

/usr/local/share/myLaravel

Luego, en su carpeta www pública, cree un enlace simbólico de la siguiente manera:

ln -s /usr/local/share/myLaravel/public mylaravel

Tendrá que hacer algunos ajustes a su instalación, como poner su Base de reescritura a / mylaravel / y asegúrese de que sus archivos de configuración permiten sobreescrituras en la ubicación base, pero esto es más simple que modificar todo.

 0
Author: Troy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-30 15:11:19

Asegúrese de comprobar sus permisos. He desplegado a través de la siguiente aunque no lo recomiendo.

Usé SSH e hice algo como:

rm -rf public_html/ // WARNING: READ NOTE AT THE BOTTOM BEFORE RUNNING

ln -s project_folder/public/ public_html  // where the format is ln -s target name

Después, recibiría un mensaje como "Whoops, parece que algo salió mal" (o un error dependiendo de su configuración de depuración). Para arreglar esto, solo tuve que cambiar mis permisos a 755 para mis carpetas. referencia: http://kb.webhostface.com/laravel/fix-permission-denied-error-laravel

Generalidades, Voy a volver y probar la forma original con permisos cambiados, ya que encuentro que esta ruta es menos segura y más dependiente de mi servicio de alojamiento al cliente.

*****Nota***** Este comando obviamente elimina su carpeta public_html (también a veces llamada public o www). Es necesario tener una copia de seguridad de todos los archivos en él porque lo está eliminando. Además, deberá estar preparado para pasar por el servicio al cliente para restaurarlo. Muchos servicios de alojamiento no le permiten simplemente recrear la carpeta por su cuenta.

 -3
Author: James Edward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-12 00:32:24