Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

.htaccess en producción para una aplicación Symfony

21 de mayo de 2016

Buenas;

He subido el proyecto al hosting en producción y tengo un problema. Tengo que poner "www.misitio.com/web/app.php" y funciona correctamente, pero poniendo "www.misitio.com" me da error:

Forbidden
 
You don't have permission to access / on this server.
 
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
  1. Mi proyecto esta guardado en \misitio\ dentro de esta carpeta estan todas las del proyecto symfony app,web,src....
  2. ¿Donde tengo que dejar el fichero .htaccess?

Muchas gracias

Este es mi fichero

# Use the front controller as index file. It serves as a fallback solution when
# every other rewrite/redirect fails (e.g. in an aliased environment without
# mod_rewrite). Additionally, this reduces the matching process for the
# start page (path "/") because otherwise Apache will apply the rewriting rules
# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
DirectoryIndex app.php
 
# By default, Apache does not evaluate symbolic links if you did not enable this
# feature in your server configuration. Uncomment the following line if you
# install assets as symlinks or if you experience problems related to symlinks
# when compiling LESS/Sass/CoffeScript assets.
# Options FollowSymlinks
 
# Disabling MultiViews prevents unwanted negotiation, e.g. "/app" should not resolve
# to the front controller "/app.php" but be rewritten to "/app.php/app".
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>
 
<IfModule mod_rewrite.c>
    RewriteEngine On
 
    # Determine the RewriteBase automatically and set it as environment variable.
    # If you are using Apache aliases to do mass virtual hosting or installed the
    # project in a subdirectory, the base path will be prepended to allow proper
    # resolution of the app.php file and to redirect to the correct URI. It will
    # work in environments without path prefix as well, providing a safe, one-size
    # fits all solution. But as you do not need it in this case, you can comment
    # the following 2 lines to eliminate the overhead.
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
 
    # Sets the HTTP_AUTHORIZATION header removed by Apache
    RewriteCond %{HTTP:Authorization} .
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
 
    # Redirect to URI without front controller to prevent duplicate content
    # (with and without `/app.php`). Only do this redirect on the initial
    # rewrite by Apache and not on subsequent cycles. Otherwise we would get an
    # endless redirect loop (request -> rewrite to front controller ->
    # redirect -> request -> ...).
    # So in case you get a "too many redirects" error or you always get redirected
    # to the start page because your Apache does not expose the REDIRECT_STATUS
    # environment variable, you have 2 choices:
    # - disable this feature by commenting the following 2 lines or
    # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
    #   following RewriteCond (best solution)
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
 
    # If the requested filename exists, simply serve it.
    # We only want to let Apache serve files and not directories.
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]
 
    # Rewrite all other queries to the front controller.
    RewriteRule ^ %{ENV:BASE}/app.php [L]
</IfModule>
 
<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        # When mod_rewrite is not available, we instruct a temporary redirect of
        # the start page to the front controller explicitly so that the website
        # and the generated links can still be used.
        RedirectMatch 302 ^/$ /app.php/
        # RedirectTemp cannot be used instead
    </IfModule>
</IfModule>
 
<VirtualHost *:80>
    ServerName      misitio.com
    ServerAlias     www.misitio.com
 
    SetEnv SYMFONY__DATABASE__USER     "..."
    SetEnv SYMFONY__DATABASE__PASSWORD "..."
 
    DocumentRoot    "/misitio/misitio.com/web"
    DirectoryIndex  app.php
 
    <Directory "/misitio/misitio.com/web">
        AllowOverride None
        Allow from All
 
        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>
 
    CustomLog  /var/log/httpd/misitio.com-access.log combined
 
    KeepAlive            On
    MaxKeepAliveRequests 200
    KeepAliveTimeout     5
 
    <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE "application/atom+xml" \
                                      "application/javascript" \
                                      "application/json" \
                                      "application/rss+xml" \
                                      "application/x-javascript" \
                                      "application/xhtml+xml" \
                                      "application/xml" \
                                      "image/svg+xml" \
                                      "text/css" \
                                      "text/html" \
                                      "text/javascript" \
                                      "text/plain" \
                                      "text/xml"
    </IfModule>
 
    <IfModule mod_headers.c>
        Header append Vary User-Agent env=!dont-vary
 
        ExpiresActive On
        ExpiresDefault "now plus 1 week"
        ExpiresByType image/x-icon "now plus 1 month"
        ExpiresByType image/gif    "now plus 1 month"
        ExpiresByType image/png    "now plus 1 month"
        ExpiresByType image/jpeg   "now plus 1 month"
    </IfModule>
</VirtualHost>

Respuestas

#1

Usa este .htaccess, solo tienes que comentar las lineas 6 y 15 para ponerlo en producción.

Tienes que ponerlo en la raiz del servidor.

@TsubasaAkai

21 mayo 2016, 12:57
#2

Muchas gracias por la respuesta pero sigue igual.

Algo estoy haciendo mal. ¿Tengo que poner el fichero que me indicas completo en la raiz del servidor? osea /missitio/aqui o en raiz /aqui

Y donde debe de apuntar mi dominio??

/raiz o /missitio

He usado el fichero de http://symfony.es/documentacion/como-configurar-bien-apache-para-las-aplicaciones-symfony2/

Pero tampoco me funciona.

La verdad es que esta parte no la tengo muy clara y no consigo entender donde tengo el error.

Muchas gracias

@Jcrosmunoz

21 mayo 2016, 21:46
#3

Si tienes un sercidor con varios dominios, por ejemplo dominio1.com y dominio2.com la configuracion de tus directorios deberia ser algo asi:

dominio1.com deberia de apuntar a rair/sitio1 y dominio2.com deberia de apuntar a raiz/sitio2 en las carpetas sitio1 y sitio2 es donde deberia estar instalado symfony directamente y tu htaccess deberia de ir en esa carpeta.

Asi deberia de funcionarte.

Un saludo

@TsubasaAkai

22 mayo 2016, 0:34
#4

Amigo la carpeta pública en el server es solamente la carpeta web/ no el proyecto completo, retrocede una carpeta atrás. O sea en la carpeta html_public solamente va la carpeta web, las demas carptas retroceden un nivel. Lo otro que es mejorcito y es basicamente lo mismo, es en la configuracion de la carpeta root de tu dominio ponerle que es la carpeta web del proyecto.

@jdvellon

23 mayo 2016, 19:51