Apache RewriteRule en htaccess: las rutas están rotas

3 minutos de lectura

avatar de usuario
Pmpr.ir

Tengo una estructura simple:

Root
|-- [app] (Symfony Application)
|    |-- [app]
|    |-- [bin]
|    |-- [src]
|    |-- [vendor]
|    |-- [web]
|         |-- .htaccess (Symfony htaccess)
|
|-- [wp-admin]
|-- [wp-content]
|-- [wp-include]
|-- .htaccess (Root htaccess)

Necesito el siguiente mapeo:

http://example.com      ==> WordPress 
http://example.com/app  ==> Symfony Application

Esto es lo que tengo:

Acceso a la raíz:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^app(.*)$ app/web/$1 [L,QSA]
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

Symfony htaccess:

DirectoryIndex app.php

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
    RewriteCond %{HTTP:Authorization} .
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]
    RewriteRule ^ %{ENV:BASE}/app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /app.php/
    </IfModule>
</IfModule>

Problema:

El problema es que, las rutas de Symfony no se resuelven:

No se encontró ninguna ruta para “GET /”

¿Hay alguna solución sencilla para esto?

  • ¿Hay alguna limitación a lo que puede cambiar? Por ejemplo, si el proveedor de alojamiento web no le otorga acceso SSH o no permite cambios en la configuración o los módulos subyacentes de Apache, o si no puede cambiar la estructura de directorios de su proyecto.

    – Adam Elsodaney

    21 de enero de 2018 a las 14:47

  • No tengo acceso de shell. tengo una solución con /web en urls, pero quiero deshacerme de eso con una solución simple. Prefiero no romper la estructura de directorios de Symfony

    – Pmpr.ir

    21 de enero de 2018 a las 16:10

  • Si tiene al menos algún tipo de herramienta de administración, ¿podría señalar un subdominio a la carpeta web?

    – Yoshi

    22 de enero de 2018 a las 14:43

Esta solución requiere acceso ssh.

Abandone todas las soluciones basadas en reglas htaccess. Trate de usar un enlace simbólico en su lugar Comando ln -s

La mejor idea aquí es poner cada proyecto en una carpeta separada fuera de la carpeta a la que apunta su dominio (vamos a nombrarlo aquí como public_html)

ROOT
|
-[Symfony]
-[WP]
-[public_html] (folder where your domain is pointing) 

y ahora – elimine public_html – agregue un enlace simbólico a wp (con el nombre de html público) – incluya wp cree un enlace simbólico a symfony/web

ROOT
|
-[Symfony]
-[WP]
-- [app]  (symbolic link to symfony/web)
-[public_html] (symbolic link to WP ) 

Como alternativa, creo que lo posible es redirigir la solicitud de Symfony a wp y luego enviar la respuesta de wp al usuario (desde Symfony). Vi soluciones como esta (se usa cuando creas una nueva aplicación sobre un sistema heredado). Pero esto es más problemático que el enlace simbólico (puedes ver la idea aquí https://www.enotogorsk.ru/en/2014/07/22/symfony-legacy-bridge/)

  • Utilice claramente la estructura de directorios estándar (como la mía). no entiendo tu notacion

    – Pmpr.ir

    23 de enero de 2018 a las 6:39


¿Ha sido útil esta solución?