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 /prefix
mi SPA , que con suerte comenzará inmediatamente a construir la página para esa ruta específica.index.html
frontendfolder
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/prefix
URL. 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.html
enrutarí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 Alias
y 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/prefix
se enrutarán a /path/to/frontendfolder/prefix
su 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.