Apache 2: redirige el espacio de nombres específico a index.html de SPA

Apache 2: redirige el espacio de nombres específico a index.html de SPA

Tengo un Angular 10-SPA que sirvo desde un servidor HTTP Apache 2.4.29, y muy poca experiencia real con servidores HTTP en general impide que este se ejecute y sirva un servidor de aplicaciones WSGI en el pasado. Dado que ese servidor HTTP también sirve a mi backend (un servidor de aplicaciones Django a través de WSGI que se conecta a través de Django-Rest-Framework a mi base de datos), mi SPA no es el destinatario de todas las solicitudes que llegan, solo las que comienzan con un prefijo determinado. p.ej www.mypage.com/prefix/. He estado intentando configurarlo para que esencialmente todas las URL que tienen esto directamente después del dominio se encuentren en /prefixmi SPA , que con suerte comenzará inmediatamente a construir la página para esa ruta específica.index.htmlfrontendfolder

He leído elDocumentación angularsobre la implementación con apache2 y la documentación de apache2Reescribir reglayReescribirCond.directivas. Esto es lo que tengo en mis sitios disponibles/mypage.conf. Todo lo que hay en la etiqueta Directorio es un copypaste modificado de angular.io:

        DocumentRoot /path/to/frontendfolder
        #DocumentRoot is not a typo, I'm not sure if DOCUMENT_ROOT calls that variable or not,
        #but there is nothing else called like it in neither the mypage.conf file, nor 
        #apache2.conf, nor envvars

        Alias /prefix /path/to/frontendfolder
        Alias /prefix/ /path/to/frontendfolder/index.html
        <Directory /path/to/frontendfolder>
                Require all granted
                RewriteEngine On
                # If an existing asset or directory is requested go to it as it is
                RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
                RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
                RewriteRule ^/prefix - [L]

                # If the requested resource doesn't exist, use index.html
                RewriteRule ^/prefix /index.html

        </Directory>

Esto me permite cargar al menos mi index.html cuando estoy en mi mypage.com/prefixURL. Si voy a mypage.com/prefix/page1 y presiono actualizar, aparece el mensaje "404 no encontrado" de Apache.

¿Qué pasa con mi configuración? Tenía la impresión de que esto RewriteRule ^/prefix /index.htmlenrutaría todo lo que comienza con /prefix a mi index.html a menos que esta URL conduzca a un archivo válido, entonces, ¿por qué no sucede eso?

Respuesta1

Su configuración parece, perdóneme, confusa.

Correcto,Raiz del documentono es un error tipográfico. Es una directiva básica de Apache que asigna el espacio URL a su sistema de archivos. Entonces le dice a Apache dónde ir para responder solicitudes, excepto cuando lo anule con Alias, RewriteRule u otra cosa.

No estoy seguro exactamente de qué asignación de espacio URL estás intentando lograr. Mi mejor consejo es comenzar eliminando todas las directivas Aliasy RewriteRule, dejando solo DocumentRoot. Luego vea si eso le proporciona la asignación de URL que desea. Por ejemplo, con sólo

DocumentRoot /path/to/frontendfolder

luego las solicitudes example.com/prefixse enrutarán a /path/to/frontendfolder/prefixsu sistema de archivos. Si se trata de un directorio y contiene, por ejemplo, un archivo index.html, la solicitud será respondida por /path/to/frontendfolder/prefix/index.html.

Ese es el punto de partida. Si no satisface sus necesidades, puede comenzar a anularlo donde lo necesite, conAliasy directivas RewriteRule. Alias ​​es más simple y fundamental, así que intente usarlo primero y recurra a RewriteRule para necesidades más complejas.

¡Buena suerte!

Por cierto, aunque la documentación de RewriteCond menciona DOCUMENT_ROOT, no dice cuál es su valor. Pero podemos asumir que es el valor de la directiva DocumentRoot.

información relacionada