subir proyecto 000webhost php .htaccess laravel nginx

php - 000webhost - Instale mĂșltiples proyectos de laravel en subcarpetas sin subdominio



subir proyecto laravel 5.6 a hosting (8)

¿Has probado esta configuración?

https://gist.github.com/tsolar/8d45ed05bcff8eb75404

Probaré mañana tan pronto como tenga tiempo de replicar su situación en mi env.

Ya intenté buscar este problema, pero todo es diferente al mío, así que estoy publicando esto aquí. Estoy tratando de crear un servidor web utilizando nginx para alojar múltiples proyectos de laravel en subcarpetas. Es mi servidor de laboratorios . Así que me gustaría tener mis proyectos así:

  • domain.com/project1
  • domain.com/project2
  • domain.com/project3

Estoy copiando el siguiente bloque de location nginx para cada proyecto (no sé qué está pasando aquí, simplemente copié de Internet y funcionó):

location ^~ /project1/ { alias /home/web/project1/public; try_files $uri $uri/ @project1; location ~ /.php { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME "/home/web/project1/public/index.php"; } } location @project1 { rewrite /avm/(.*)$ /project1/index.php?/$1 last; }

Y rutas RESTful en mi aplicación de laravel como esta:

/* |-------------------------------------------------------------------------- | Application Routes |-------------------------------------------------------------------------- | | Here is where you can register all of the routes for an application. | It''s a breeze. Simply tell Laravel the URIs it should respond to | and give it the controller to call when that URI is requested. | */ Route::get(''/'', [''middleware'' => ''auth'',''uses'' => ''HomeController@index''])->name(''home''); // Authentication Route::get(''auth/login'', ''Auth/AuthController@getLogin''); Route::post(''auth/login'', ''Auth/AuthController@authenticate''); Route::get(''auth/logout'', ''Auth/AuthController@getLogout''); // Administração Route::group([''prefix'' => ''administracao'', ''middleware'' => ''auth''], function() { Route::resource(''filiais'', ''FiliaisController''); Route::resource(''precos'', ''PrecosController''); Route::resource(''funcionarios'', ''FuncionariosController''); Route::resource(''cargos'', ''CargosController''); Route::resource(''vendedores'', ''VendedoresController''); }); // Comercial Route::group([''prefix'' => ''comercial'', ''middleware'' => ''auth''], function() { Route::resource(''clientes'', ''ClientesController''); Route::resource(''fichas'', ''FichasController''); }); // Operacional Route::group([''prefix'' => ''operacional'', ''middleware'' => ''auth''], function() { Route::resource(''agenda'', ''AgendaController''); Route::resource(''os'', ''OsController''); Route::resource(''ambientes'', ''AmbientesController''); Route::resource(''processos'', ''ProcessosController''); Route::get(''relatorios'', ''RelatoriosController@index''); Route::group([''prefix'' => ''processo'', ''middleware'' => ''auth''], function() { Route::get(''create'', ''ProcessoController@create''); Route::get(''index'', ''ProcessoController@index''); Route::post(''{os}/parse'', ''ProcessoController@parse''); Route::get(''{os}'', ''ProcessoController@principal''); Route::match([''get'', ''post''], ''{os}/detalhe'', ''ProcessoController@detalhe''); Route::get(''{os}/duplicidades'', ''ProcessoController@duplicidades''); Route::get(''{os}/restantes'', ''ProcessoController@restantes''); Route::match([''get'', ''post''], ''{os}/auditoria'', ''ProcessoController@auditoria''); Route::match([''get'', ''post''], ''{os}/operadores'', ''ProcessoController@operadores''); Route::match([''get'', ''post''], ''{os}/divergencia'', ''ProcessoController@divergencia''); Route::match([''get'', ''post''], ''{os}/finalizar'', ''ProcessoController@finalizar''); Route::get(''{os}/excluir/{setor}'', ''ProcessoController@destroy''); }); });

Aunque parece que funciona (la página aparece, etc.) cuando entra en la lógica de negocios (guardar en la base de datos, etc.) parece tener muchos errores. Por ejemplo, cuando intento crear un nuevo empleado en url http://domain.com/project1/administracao/funcionarios , SQLSTATE[42S22]: Column not found: 1054 Unknown column ''/administracao/funcionarios'' in el error: SQLSTATE[42S22]: Column not found: 1054 Unknown column ''/administracao/funcionarios'' in (Es un poco antes de algunas rutas de url)

Y cuando configuro un subdominio como project1.domain.com todo funciona bien. Pero no quiero crear un subdominio para cada proyecto, quiero que funcione en las subcarpetas url. ¿Es posible?


Creo que el problema podría estar en su archivo nginx.conf . Prueba esto:

location ^~ /project1 { alias /home/web/project1/public; try_files $uri $uri/ @project1; location ~ /.php { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include /etc/nginx/fastcgi_params; } } location @project1 { rewrite /project1/(.*)$ /project1/index.php?/$1 last; }

Además, asegúrese de que /home/web/project1/ esté fuera de su raíz web.

Dicho esto, realmente no se recomienda ejecutar Laravel en una subcarpeta. Mucho más fácil en un subdominio.

Tengo la idea básica para esta sugerencia de esta esencia .


Hay una solución simple para "Quiero que funcione en las URL de las subcarpetas. ¿Es posible?".

Pasos
1. Haz una carpeta dentro de tu carpeta pública de dominio principal. necesitas crear 3 carpetas
Inicio / web / public / project1
Inicio / web / public / project2
Inicio / web / public / project3

2. Dentro de cada carpeta de proyecto, debe pegar el contenido de la carpeta pública de su aplicación laravel

(de su Proyecto Laravel ) project1 / public / {contents} - copie esto a -> (servidor alojado) home / web / public / project1 / {contents}

  1. Cargue el resto del proyecto de laravel fuera del directorio raíz público y otorgue acceso de escritura a la carpeta.

  2. Ahora abra (servidor alojado) public / project1 / index.php actualice estos dos campos

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

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


He ejecutado con éxito un proyecto Laravel 5.4 en una "subcarpeta" de otro sitio mediante un simple enlace simbólico.

No había reglas de reescritura especiales funky en la configuración de Nginx. No copiar y pegar secciones del proyecto. No se menciona la subcarpeta en las rutas. Solo un proyecto regular de Laravel 5 bien contenido en algún lugar del servidor y un enlace simbólico a su carpeta pública desde la raíz del documento del sitio principal.

/var/www/domain.com/public/project1 --> /var/www/project1/public

¡Todas las rutas solo funcionan!

Al escribir sus vistas, debe ajustar las rutas para los activos del lado del cliente en la función de ayuda de asset() para que las rutas en el HTML contengan la subcarpeta y el navegador pueda encontrarlas.

<!-- Styles --> <link href="{{ asset(''css/app.css'') }}" rel="stylesheet">

Pero hacer eso no hace que su código sea menos flexible, porque si ejecuta el sitio en un entorno al que no se accede a través de una subcarpeta, funciona porque asset() funciona con lo que contiene la barra de direcciones.


No estoy completamente seguro de la solución, pero creo que deberías probar estos:

  • En primer lugar: configurar la url correctamente en el archivo config/app.php .
  • En segundo lugar: revisar public/web.config archivo public/web.config . El problema podría ser que estas configuraciones sobrescriban su nginx. considere cambiar <action type="Rewrite" url="project1/index.php" /> y vea lo que devuelve.

En última instancia, var_dump el modelo y busca de dónde viene.


Recientemente tuve el mismo problema exacto. Queria tener

pero odiaba tener que modificar nginx conf cada vez que agregué un nuevo proyecto.

Esto es lo que se me ocurrió:

# Capture $project from /$projectname/controller/action map $request_uri $project { ~^/(?<captured_project>[a-zA-Z0-9_-]+)/? $captured_project; default / ; } server { listen 11.22.33.44:80; server_name customerdemo.example.com www.customerdemo.example.com; # Use $project/public as root root /sites/customerdemo.example.com/$project/public; # Use index.php as directory index index index.php; # Include the basic h5bp config set (see https://github.com/h5bp/server-configs-nginx) include h5bp/basic.conf; # Process /projectname/the/rest/of/the/url location ~ ^/([^/]+)/(.*) { # Save the rest of the URL after project name as $request_url set $request_url /$2; # If the saved url refers to a file in public folder (a static file), serve it, # else redirect to index.php, passing along any ?var=val URL parameters try_files $request_url /index.php?$is_args$args; } # Process any URL containing .php (we arrive here through previous location block) # If you don''t need to serve any other PHP files besides index.php, use location /index.php here # instead, to prevent possible execution of user uploaded PHP code location ~ [^/]/.php(/|$) { # Define $fastcgi_script_name and $fastcgi_path_info fastcgi_split_path_info ^(.+?/.php)(/.*)$; # Immediately return 404 when script file does not exist if (!-f $document_root$fastcgi_script_name) { return 404; } # Mitigate https://httpoxy.org/ vulnerabilities fastcgi_param HTTP_PROXY ""; # Define PHP backend location (find yours by grepping "listen =" # from your PHP config folder, e.g. grep -r "listen =" /etc/php/) fastcgi_pass unix:/run/php/php7.0-fpm.sock; # Set SCRIPT_FILENAME to execute fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # Include the default fastcgi parameters include fastcgi_params; # Overwrite REQUEST_URI (default is $request_uri) with $request_url we saved earlier fastcgi_param REQUEST_URI $request_url; } }

El resultado es que no tengo que hacer CUALQUIER COSA que no sea git clone en la carpeta /sites/customerdemo.example.com/ y ejecutar la composer install y la php artisan migrate para agregar un nuevo proyecto.

De hecho, me he desarrollado un panel de control donde puedo hacer clic en "Agregar proyecto" y especificar los detalles del proyecto y un nuevo repositorio de bitbucket, se crearán el usuario y la base de datos de mysql y se le dará acceso al servidor customerdemo a este repositorio de bitbucket y un webhook se configura en este nuevo repositorio que invocará una secuencia de comandos de implementación en el servidor customerdemo cada vez que alguien se comprometa a dominar este repositorio que activará la clonación de git o la extracción de git pull e compositor y la migración de la base de datos. Es por eso que necesitaba la configuración dinámica de Nginx. ;-)


Revisa esta configuración de Nginx . Creo que te ayudará.

server { server_name main-app.dev; root /var/www/projects/main/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.html index.htm index.php; charset utf-8; # sub_directory location ^~ /sub-app { alias /var/www/projects/sub/public; try_files $uri $uri/ @sub; location ~ /.php { fastcgi_split_path_info ^(.+/.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_read_timeout 30000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www/projects/sub/public/index.php; } access_log off; error_log /var/www/projects/sub/storage/log/error.log error; } location @sub { rewrite /sub/(.*)$ /sub/index.php?/$1 last; } # end sub_directory location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log off; error_log /var/www/projects/main/storage/log/error.log error; error_page 404 /index.php; location ~ /.php$ { fastcgi_split_path_info ^(.+/.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_read_timeout 30000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } location ~ //.(?!well-known).* { deny all; }}


intente algo como esto ... Estoy usando el siguiente .conf para mi servidor:

server { listen 80; root /vagrant; index index.html index.htm index.php app.php app_dev.php; server_name 192.168.33.10.xip.io; access_log /var/log/nginx/vagrant.com-access.log; error_log /var/log/nginx/vagrant.com-error.log error; charset utf-8; location ~project(/d*)/((.*)/.(?:css|cur|js|jpg|jpeg|gif|htc|ico|png|html|xml))$ { rewrite project(/d*)/((.*)/.(?:css|cur|js|jpg|jpeg|gif|htc|ico|png|html|xml))$ /project$1/public/$2 break; } location /project1{ rewrite ^/project1/(.*)$ /project1/public/index.php?$1 last; } location /project2 { rewrite ^/project2/(.*)$ /project2/public/index.php?$1 last; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ /.php$ { fastcgi_split_path_info ^(.+/.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; set $laravel_uri $request_uri; if ($laravel_uri ~ project(/d*)(/?.*)$) { set $laravel_uri $2; } fastcgi_param REQUEST_URI $laravel_uri; fastcgi_param LARA_ENV local; # Environment variable for Laravel fastcgi_param HTTPS off; } location ~ //.ht { deny all; } }