Quitar /web de la URL en producción en servidor compartido

Buenas,

El otro día con el nuevo .htaccess conseguí que se quitara al menos la parte del entorno de ejecución (app.php) pero, ¿cómo podría quitar el /web sin un VirtualHost? La página de Symfony2 se encuentra en un servidor 1and1.

Gracias. Un saludo.

Respuestas

#1

Pues en 1and1 hay varias formas de hacerlo pero la mas sencilla es:

Teniendo en cuenta que tu web es xxx.com:

1. Ir al panel de administración de 1and1 2. Ir a la sección de dominios, subdominios etc y cambiar el directorio al que apunta tu web raíz:

xxx.com --> /

por esto:

xxx.com --> /web

Creo recordar que en 1and1, cuando quieres modificar el directorio hay dos opciones, seleccionar uno existente (es un select) o crear uno (es un textbox). Si en el select no encuentras /web aunque esté creado, es un fallito que tienen ellos. Simplemente usa el textbox y mete /web, aunque se trate de un textbox para crear uno nuevo. Si ya existe no te sobreescribe nada así que tranqui.

Ten en cuenta que estos cambios a veces tardan unos minutos.

Saludos

#2

me cuentas, saludos

#3

Muchas gracias, no había caído en esa solución tan trivial ;)

#4

Buenas de nuevo,

Al final me ha funcionado pero claro, después de que se actualizara todo, las sentencias en las que uso asset (para los css, javascript y demás) dejan de funcionar pues apuntan dos veces a /web/web ¿qué solución habría para eso?

Gracias!!

#5

Hola,

La aplicación symfony has de subirla directamente al antiguo raiz del servidor compartido.

En el ejemplo que habeis puesto xxx.com y esta ya incluye /web que es donde apunta ahora el hosting del servidor. Esta será la carpeta pública y todo lo que hay por debajo es la aplicación symfony.

Un saludo.

#6

@julioalp no te he entendido muy bien. El problema que tengo ahora es que al hacer la solución de @CVM1989, cambiar el directorio al que apunta mi web raíz, funciona todo menos los css, js, etc (a los que referencio con la función asset) y claro ella me crea ahora la url de estos archivos incluyendo en la url la parte /web (que ahora ya "no está ahí" pues lo hemos redirigido al raíz de mi dominio), no sé si explico lo que ocurre bien.

Un saludo.

#7

@julioalp no te he entendido muy bien. El problema que tengo ahora es que al hacer la solución de @CVM1989, cambiar el directorio al que apunta mi web raíz, funciona todo menos los css, js, etc (a los que referencio con la función asset) y claro ella me crea ahora la url de estos archivos incluyendo en la url la parte /web (que ahora ya "no está ahí" pues lo hemos redirigido al raíz de mi dominio), no sé si explico lo que ocurre bien.

Un saludo.

#8

Hola @CampoySoft,

Intentaré explicarme mejor.

Tenemos un hosting, que apunta a un directorio, ejemplo httpdocs.

Subes toda tu aplicación symfony a esa carpeta.

Si pruebas, evidentemente no funciona, puesto que el directorio público de una aplicación symfony es /web.

Como bien te dice @CVM1989 es tan fácil como cambiar la configuración en el hosting y que apunte a la carpeta httpdocs/web

Resultado

httpdocs-> app
           scr
           ...
           web-> app.php

Tu directorio público es /web, donde está todo el contenido público incluido la carpeta bundles y todos los css.

En los assets imagino que apuntas a bundles/nombre_aplicacion/css/nombre.css

Dime algo ...

Un saludo.

#9

Buenas,

Los assets los tengo en la carpeta /web/css/nombre.css o /web/js/nombre.js y hago la llamada con al función asset así:

<script src="{{ asset('js/files-handler.js') }}" type="text/javascript"></script>

Por lo que la función asset te devuelve la url con la parte /web, que ahora ya no es puesto que ahora el hosting apunta a /web ya directamente. ¿Se puede cambiar el comportamiento de la función asset para no tener que modificar todos los archivos? ¿o cuáles son las buenas prácticas para esto? Porque imagino que la gente enmascarará la parte /web de su url.

Un saludo y gracias!!

#10

@CampoySoft Symfony define una opción de configuración llamada assets_base_urls que permite indicar la URL base utilizada para los assets, tanto cuando se accede a ellos mediante http como cuando se accede mediante https. En tu caso deberías utilizar algo como lo siguiente:

# app/config/config.yml
framework:
    templating:
        assets_base_urls:
            http: '/web'
            ssl:  '/web'

Aquí tienes la documentación oficial sobre assets_base_urls.

#11

Si pones este código en tu .haccess en la carpeta web, te funciona. Comprobado y testado por mi.

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^dominio.pt$ [NC,OR]
    RewriteCond %{HTTP_HOST} ^www.dominio.pt$
    RewriteCond %{REQUEST_URI} !^/web/.*$
    RewriteRule ^(.*)$ /web/$1 [QSA,L]
    # Explicitly disable rewriting for front controllers
    #RewriteRule ^app_dev.php - [L]
    RewriteRule ^web/app.php - [L]
 
    RewriteCond %{REQUEST_FILENAME} !-f
 
    # Change below before deploying to production
    #RewriteRule ^(.*)$ /app.php [QSA,L]
    RewriteRule ^(.*)$ web/app.php [QSA,L]
</IfModule>

Saludos

#12

Holas!!!

Con estos simples pasos se puede subir una web a un servidor compartido de 1an1?

Gracias