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

Me preguntaba si alguno de ustedes sabe de una forma de instalar Laravel 4 en una subcarpeta SUBDIRECTORY / host web sin exponer la carpeta / app / y otros archivos sensibles a la parte de acceso público del host.

La idea es que podría acceder a 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 puedo ver mis archivos de configuración y otro código.

Así que descubrí cómo hacer esto. Voy a explicar con un ejemplo.

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

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 del public/ carpeta de Laravel 4.

Ahora, para el rest de los archivos. Tienes que ir a la raíz de tus archivos de alojamiento web, es decir, quieres estar en domain.com/ level, por lo tanto, puedes ver public_html/ y algunas otras carpetas. Entonces, 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/ tenemos que almacenar todos los archivos y carpetas que existen en el directorio base de Laravel 4. Eso sería app/ , bootstrap/ , vendor/ , server.php , etc. Todo EXCEPTO la carpeta /public/ , cuyo contenido ya has almacenado en public_html/yourlaravel4/ .

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


En el archivo paths.php , reemplace:

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

con:

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

En el archivo paths.php , reemplace:

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

con:

 'public' => __DIR__, 

En el archivo paths.php , reemplace:

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

con:

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

En paths.php , reemplace:

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

con:

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

En index.php , reemplace:

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

con:

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

En index.php , reemplace:

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

con:

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

Subir cambios Ahora debería poder tener instalado Laravel 4 en una subcarpeta en su sitio web sin exponer realmente la app/ carpeta y otros archivos confidenciales. 🙂

Puede usar un alias: sin hankey-pankey con directorios generalizados en su sistema.

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

 /mylaravel/ /path/to/laravel/public 

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

Línea 29

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

Eventualmente configure RewriteBase en su /public/.htaccess

 RewriteBase /mylaravel/ 

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

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

(Para otras carpetas públicas, como htdocs o www simplemente reemplace public_html a continuación con la suya).

  1. Coloque todas las cosas de Laravel en la carpeta de nivel superior (para que la carpeta de la 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. Eliminar la carpeta public ahora vacía
  4. En el cambio bootstrap/path.php

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

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

  5. Hecho.

La respuesta de Emmanuel no funciona para mí, pero hice algunos cambios para que funcione. aunque utilicé mi raíz web para ser la fuente de un proyecto. ahí está ; Tengo la carpeta htdocs como carpeta raíz pero es posible que tenga otra, como public_html, www o más. puedes reemplazar fácilmente mis htdocs con el que tienes.

bien

mi dircetorio

 raíz/ 
       htdocs
       .htaccess
       .anular 

primero resolví todas las dependencias de laravel en mi servidor local en Windows con el compositor. después de eso hice empacar todo el paquete en laravel4.zip. en mi htdocs creo una carpeta laravel y cargué y descomprimí el archivo zip en ella.

  htdocs /
         laravel /
                  aplicación
                  oreja
                  público 
                  vendedores
                  ... 

así que después de haber descomprimido el archivo, moví todo en la carpeta pública a la carpeta htdocs

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

ahora tenemos que reescribir algunos pathes en htdocs / index.php y htdocs / laravel / bootstrap / paths.php

pero vamos a abrir htdocs / laravel / bootstrap / paths.php. tu verias

  'app' => __DIR __. '/ .. / app', 

Qué significa eso . significa que estamos parados en htdocs / laravel / bootstrap / path. y allí necesitamos salir de esta carpeta para abrir la carpeta y luego ir a la carpeta de aplicaciones. Okay . esta es la estructura del laravel para el enrutamiento. si lo haces bien, puedes hacer correr tu laravel.

encontrar

  'public' => __DIR __. '/ .. / public', 

y cambiarlo a

  'public' => __DIR __. '/ .. / .. / htdocs', 

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

abra htdocs / index.php y encuentre

  requiere __DIR __. '/ .. / bootstrap / autoload.php'; 

cambiarlo a

  requiere 'laravel / bootstrap / autoload.php'; 

require es una función php incorporada así que vamos a tratarlo como un simple php. Realmente no necesitamos un estilo laravel para recuperar el archivo autoload.php. así que simplemente quítalo y elige el estilo clásico

encontrar

  $ app = require_once __DIR __. '/ .. / bootstrap / start.php'; 

cambiarlo a

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

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

 http://mywebsite.com/mylaravel/ 

Así que esta respuesta es para ti, antes que nada asegúrate de conocer

Requisitos de Laravel 5.1:

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

aquí dos tutoriales fáciles para usted:

Enlace 1

Enlace 2

Si está utilizando el asistente addondomain o subdomaind en su panel, el asistente le preguntará por la raíz del documento. por ejemplo, quiero agregar droidman.com, el asistente debe sugerirme con la creación de la carpeta droidman.com. en este paso, indique al asistente que cree la carpeta droidman.com/public. luego coloque su aplicación en la carpeta droidman.com. su host mirará la carpeta pública;). problema resuelto

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

Paso 1: crea un archivo zip o tar de tu aplicación Laravel completa en tu máquina local.

Paso 2: ve a Cpanel. Suba el archivo zip / tar al directorio public_html y luego extráigalo. (También puede crear una carpeta separada para su aplicación laravel. Como deseo subir más de una aplicación Laravel, he creado un directorio separado para cada una, como se muestra en la imagen de abajo).

enter image description here

Paso 3: Ahora ve a ‘Addon Domain’ y cambia la raíz del documento de tu dominio especificado. Apunte el dominio a la carpeta pública.

enter image description here

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

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

Por ejemplo, coloco mis instalaciones de Laravel en:

 /usr/local/share/myLaravel 

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

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

Tendrá que hacer algunos ajustes en su instalación, como colocar su Base de Reescritura en / mylaravel / y asegurarse de que sus archivos de configuración permitan anulaciones en la ubicación base, pero esto es más simple que modificar todo.

Asegúrate de verificar tus permisos. Implementé lo 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 “Vaya, parece que algo salió mal” (o un error según la configuración de depuración). Para solucionar esto, solo tuve que cambiar mis permisos a 755 para mis carpetas . referencia: http://kb.webhostface.com/laravel/fix-permission-denied-error-laravel

En general, voy a volver atrás y probar la forma original con los permisos modificados ya que considero que esta ruta es menos segura y más dependiente de mi servicio al cliente de hosting.

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