Tengo una aplicación React que se encuentra en el directorio mysite.com/admin . Por lo tanto, index.html se encuentra en mysite.com/admin/index.html . La aplicación contiene rutas como /admin/users o /admin/tools/removeUser .
¿Cómo configuro .htaccess para cargar mysite.com/admin/index.html cuando abro mysite.com/admin/ por ejemplo? La url en sí debe permanecer igual para representar la ruta necesaria.
Debería decir que también hay una aplicación React en el directorio raíz. Esto es lo que probé:
RewriteEngine on RewriteBase / #for app in subdirectory RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^admin admin/index.html [L] #for root app RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule . /index.html [L] Pero cuando abro mysite.com/admin/tools/removeUser por ejemplo, en la consola aparece este error:
¿Qué estoy haciendo mal?
Tienes razón.
Cuando se ejecuta en el servidor local, el enrutamiento del nodo JS (los componentes son BrowserRouter, Switch, Route) funciona bien. Abrir enlace directo y recargar página funciona correctamente. Pero cuando se implementa en el servidor web Apache, se inicia el trabajo de la aplicación del componente (porque la página no se recarga), pero cuando se recarga la página, aparece la página 404. La misma página 404 aparece cuando se abre un enlace directo que contiene una parte de la aplicación de ruta. El servidor Appache requiere una configuración correcta en el archivo .httpaccess. Por ejemplo, tengo dos CMS en el servidor apache y uno de ellos es SPA. Mi CMS debería tener reglas y otro sistema como SPA debería tener reglas en .httpaccess
Motor de reescritura en
#para aplicación en subdirectorio
RewriteBase /admin/
Regla de reescritura ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
Regla de reescritura ^.*admin/.* /admin/index.html [L]
#para aplicación raíz
Reescribir Base /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
Regla de reescritura. /index.html [L]
Es importante que las reglas del subdirectorio de la aplicación no sobrescriban las reglas de la aplicación principal.