vhost run htaccess .htaccess symfony

.htaccess - run - symfony/apache-pack



Symfony: htaccess para ocultar app.php o app_dev.php (2)

Sé que esto se ha preguntado muchas veces, pero algo extraño me está sucediendo. Apache DocumentRoot apunta a Symfony / web / y este es mi .htaccess dentro de web / dir:

DirectoryIndex app_dev.php #DirectoryIndex app.php <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^app/.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [R=301,L] RewriteCond %{REQUEST_FILENAME} -f RewriteRule .? - [L] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^(.*)$ app_dev.php [QSA,L] #RewriteRule ^(.*)$ app.php [QSA,L] RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::/2$ RewriteRule ^(.*) - [E=BASE:%1] RewriteRule .? %{ENV:BASE}app.php [L] </IfModule> <IfModule !mod_rewrite.c> <IfModule mod_alias.c> RedirectMatch 302 ^/$ /app.php/ </IfModule> </IfModule>

Bueno, el asunto es que www.example.com/route1/ está funcionando y www.example.com/route2/ está lanzando un error:

Oops! Se produjo un error El servidor devolvió un "404 no encontrado". Algo está roto. Envíenos un correo electrónico a [correo electrónico] y háganos saber lo que estaba haciendo cuando ocurrió este error. Lo arreglaremos lo más pronto posible. Pedimos disculpas por cualquier inconveniente causado.

Mientras que www.example.com/app_dev.php/route2/ está funcionando bien (también www.example.com/app_dev.php/route1/ )

¿Ayuda?

Actualizar. Cache clear in prod arroja este error (nunca lo intenté antes, estoy trabajando en dev):

[Doctrine / Common / Proxy / Exception / UnexpectedValueException] La sugerencia de tipo del parámetro "userRoles" en el método "addRole" en la clase "MyProject / PanelBundle / Entity / User" no es válida.

[ReflectionException] Clase Maycol / BlogBundle / Entity / Role no existe


Este error NO está relacionado con Apache / htaccess. ¡Esta página de error 404 es la predeterminada de Symfony!

Something is broken. Please e-mail us at [email] and let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.

No hay ninguna coincidencia de ruta / ruta2. Compruebe su enrutamiento de esta manera:

php app/console router:debug

Para inspeccionarlo más rápido use grep o findstr (Windows)

php app/console router:debug | grep route2

Compruebe también que su ruta no solo esté configurada en el entorno de desarrollo (es decir, solo en routing_dev.yml).

php app/console router:debug --env=prod

por favor borre su caché de producción con ...

php app/console cache:clear --env=prod

... y verifique sus archivos de registro si hay una excepción no detectada que conduce a la página 404 que se muestra al acceder a la página. Puede, por ejemplo, usar este comando para ver los cambios en vivo en el archivo de registro de producción.

tail -f app/logs/prod.log


Este es el .htaccess que funcionó para mí:

DirectoryIndex app.php #DirectoryIndex app_dev.php <IfModule mod_rewrite.c> RewriteEngine On # 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 startpage 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_dev/.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [R=301,L] RewriteRule ^app/.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [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] RewriteCond %{REQUEST_FILENAME} -f #RewriteRule ^(.*)$ app_dev.php [QSA,L] RewriteRule ^(.*)$ app.php [QSA,L] # The following rewrites all other queries to the front controller. The # condition ensures that if you are using Apache aliases to do mass virtual # hosting, the base path will be prepended to allow proper resolution of the # app.php file; it will work in non-aliased environments as well, providing # a safe, one-size fits all solution. RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::/2$ RewriteRule ^(.*) - [E=BASE:%1] #RewriteRule .? %{ENV:BASE}app_dev.php [L] 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 startpage to the front controller explicitly so that the website # and the generated links can still be used. #RedirectMatch 302 ^/$ /app_dev.php/ RedirectMatch 302 ^/$ /app.php/ # RedirectTemp cannot be used instead </IfModule> </IfModule>