Tenía la impresión de que Angular reescribiría las URL que aparecen en los atributos href de las etiquetas de anclaje dentro de las plantillas, de modo que funcionen ya sea en modo html5 o en modo hashbang. La documentación para el servicio de ubicación parece decir que HTML Link Rewriting se ocupa de la situación de hashbang. Por lo tanto, esperaría que cuando no esté en modo HTML5, se insertarán hashes, y en modo HTML5, no.
Sin embargo, parece que no se está reescribiendo. El siguiente ejemplo no me permite simplemente cambiar el modo. Todos los enlaces en la aplicación tendrían que reescribirse a mano (o derivarse de una variable en tiempo de ejecución. ¿Debo reescribir manualmente todas las URL dependiendo del modo?
No veo ninguna reescritura de URL del lado del cliente en Angular 1.0.6, 1.1.4 o 1.1.3. Parece que todos los valores href deben anteponerse con # / para el modo hashbang y / para el modo html5.
¿Hay alguna configuración necesaria para reescribir? ¿Estoy leyendo mal los documentos? ¿Haciendo algo más tonto?
Aquí hay un pequeño ejemplo:
<head>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.3/angular.js"></script>
</head>
<body>
<div ng-view></div>
<script>
angular.module('sample', [])
.config(
['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
//commenting out this line (switching to hashbang mode) breaks the app
//-- unless # is added to the templates
$locationProvider.html5Mode(true);
$routeProvider.when('/', {
template: 'this is home. go to <a href="https://stackoverflow.com/about"/>about</a>'
});
$routeProvider.when('/about', {
template: 'this is about. go to <a href="https://stackoverflow.com/"/>home</a'
});
}
])
.run();
</script>
</body>
Anexo: al releer mi pregunta, veo que utilicé el término "reescribir" sin una gran claridad sobre quién y cuándo quería reescribir. La pregunta es acerca de cómo hacer que Angular reescriba las URL cuando renderiza rutas y cómo hacer que interprete rutas en el código JS de manera uniforme en los dos modos. No se trata de cómo hacer que un servidor web realice una reescritura de solicitudes compatible con HTML5.