Tengo el proyecto semilla AngularJS y he agregado
$locationProvider.html5Mode(true).hashPrefix('!');
al archivo app.js. Quiero configurar IIS 7 para enrutar todas las solicitudes a
http://localhost/app/index.html
para que esto funcione para mí ¿Cómo hago esto?
Actualizar:
Acabo de descubrir, descargar e instalar el módulo de reescritura de URL de IIS , esperando que esto haga que sea fácil y obvio lograr mi objetivo.
Actualización 2 :
Supongo que esto resume lo que estoy tratando de lograr (tomado de la documentación de AngularJS Developer ):
El uso de este modo requiere la reescritura de URL en el lado del servidor, básicamente debe reescribir todos sus enlaces al punto de entrada de su aplicación (por ejemplo, index.html)
Actualización 3:
Todavía estoy trabajando en esto y me doy cuenta de que NO necesito redirigir (tener reglas que reescriban) ciertas URL como
http://localhost/app/lib/angular/angular.js
http://localhost/app/partials/partial1.html
así que todo lo que está en los directorios css, js, lib o parciales no se redirige. Todo lo demás deberá ser redirigido a app / index.html
¿Alguien sabe cómo lograr esto fácilmente sin tener que agregar una regla para cada archivo?
Actualización 4:
Tengo 2 reglas entrantes definidas en el módulo IIS URL Rewrite. La primera regla es:
La segunda regla es:
Ahora, cuando navego a localhost / app / view1, carga la página, sin embargo, los archivos de soporte (los que están en los directorios css, js, lib y partials) también se están reescribiendo en la página app / index.html, por lo que todo está llegando volver a la página index.html sin importar qué URL se utiliza. Supongo que esto significa que mi primera regla, que se supone que evita que estas URL sean procesadas por la segunda regla, no está funcionando ... ¿alguna idea? ...¿nadie? ...Me siento tan sola... :-(
fuente
app/index.html
y noapp/
activar explícitamente la página que sirve AngularJS. Perdí 2 horas de mi vida antes de resolverlo. :-)Respuestas:
Escribo una regla en web.config después de que
$locationProvider.html5Mode(true)
se estableceapp.js
.Esperanza, ayuda a alguien.
En mi index.html agregué esto a
<head>
No olvide instalar IIS URL Rewrite en el servidor.
Además, si usa API web e IIS, esto funcionará si su API se encuentra en
www.yourdomain.com/api
la tercera entrada (tercera línea de condición).fuente
Las reglas de entrada de IIS como se muestra en la pregunta SÍ funcionan. Tuve que borrar el caché del navegador y agregar la siguiente línea en la parte superior de mi
<head>
sección de la página index.html:Esto se debe a que tengo más de una aplicación en localhost y, por lo tanto, se enviaron solicitudes a otros parciales en
localhost/app/view1
lugar delocalhost/myApplication/app/view1
¡Ojalá esto ayude a alguien!
fuente
En mi caso, seguí obteniendo un 403.14 después de haber configurado las reglas correctas de reescritura. Resulta que tenía un directorio que tenía el mismo nombre que una de mis rutas URL. Una vez que eliminé la regla de reescritura de IsDirectory, mis rutas funcionaron correctamente. ¿Hay algún caso en el que eliminar la negación del directorio pueda causar problemas? No puedo pensar en ninguno en mi caso. El único caso que se me ocurre es si puede navegar por un directorio con su aplicación.
fuente
El problema con solo tener estas dos condiciones:
es que funcionan solo mientras
{REQUEST_FILENAME}
exista físicamente en el disco . Esto significa que puede haber escenarios en los que una solicitud de una vista parcial con un nombre incorrecto devolvería la página raíz en lugar de un 404, lo que provocaría que angular se cargara dos veces (y en ciertos escenarios puede causar un bucle infinito desagradable).Por lo tanto, se recomendarían algunas reglas seguras de "respaldo" para evitar estos problemas difíciles de solucionar:
o una condición que coincide con cualquier final de archivo :
fuente
La forma más fácil que encontré es simplemente redirigir las solicitudes que activan 404 al cliente. Esto se hace agregando un hashtag incluso cuando
$locationProvider.html5Mode(true)
está configurado.Este truco funciona para entornos con más aplicaciones web en el mismo sitio web y que requieren restricciones de integridad de URL (por ejemplo, autenticación externa). Aquí está paso a paso cómo hacerlo
index.html
Establecer el
<base>
elemento correctamenteweb.config
Primero redirija 404 a una página personalizada, por ejemplo "Inicio / Error"
Controlador de inicio
Implemente una entrada simple
ActionResult
para "traducir" en una ruta del lado del cliente.Esta es la forma más simple.
Es posible (¿aconsejable?) Mejorar la función Error con alguna lógica mejorada para redirigir 404 al cliente solo cuando la url es válida y dejar que el 404 se active normalmente cuando no se encuentre nada en el cliente. Digamos que tienes estas rutas angulares
Tiene sentido redirigir la URL al cliente solo cuando comienza con "/ New" o "/ Show /"
Esto es solo un ejemplo de lógica mejorada, por supuesto, cada aplicación web tiene diferentes necesidades
fuente
He estado tratando de implementar una aplicación simple de Angular 7 en una aplicación web de Azure. Todo funcionó bien, hasta el punto en que actualizaste la página. Al hacerlo, me estaba presentando un error 500: contenido movido. He leído tanto en los documentos de Angular como en algunos buenos foros, que necesito agregar un archivo web.config a mi solución implementada y asegurarme de que la regla de reescritura recurra al archivo index.html. Después de horas de frustración y pruebas de prueba y error, descubrí que el error era bastante simple: agregar una etiqueta alrededor del marcado de mi archivo.
fuente
Tuve un problema similar con Angular e IIS lanzando un código de estado 404 en la actualización manual y probé la solución más votada, pero eso no funcionó para mí. También probé un montón de otras soluciones que tenían que lidiar con WebDAV y cambiar los controladores y ninguna funcionó.
Afortunadamente encontré esta solución y funcionó (saqué partes que no necesitaba). Entonces, si ninguno de los anteriores funciona para usted o incluso antes de probarlos, intente esto y vea si eso soluciona su implementación angular en este problema.
Agregue el fragmento a su configuración web en el directorio raíz de su sitio. Según tengo entendido, elimina el código de estado 404 de cualquier herencia (applicationhost.config, machine.config), luego crea un código de estado 404 a nivel del sitio y lo redirige a la página de inicio como una página 404 personalizada.
fuente