Quiero habilitar el modo HTML5 para mi aplicación. He puesto el siguiente código para la configuración, como se muestra aquí :
return app.config(['$routeProvider','$locationProvider', function($routeProvider,$locationProvider) {
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix = '!';
$routeProvider.when('/', {
templateUrl: '/views/index.html',
controller: 'indexCtrl'
});
$routeProvider.when('/about',{
templateUrl: '/views/about.html',
controller: 'AboutCtrl'
});
Como puede ver, usé el $locationProvider.html5mode
y cambié todos mis enlaces en el ng-href
para excluir el /#/
.
El problema
Por el momento, puedo ir localhost:9000/
y ver la página de índice y navegar a las otras páginas como localhost:9000/about
.
Sin embargo, el problema ocurre cuando actualizo la localhost:9000/about
página. Me sale el siguiente resultado:Cannot GET /about
Si miro las llamadas de red:
Request URL:localhost:9000/about
Request Method:GET
Mientras que si primero voy localhost:9000/
y luego hago clic en un botón que navega /about
, obtengo:
Request URL:http://localhost:9000/views/about.html
Lo que hace la página perfectamente.
¿Cómo puedo habilitar angular para obtener la página correcta cuando actualizo?
angularjs
html
angular-routing
Dieter De Mesmaeker
fuente
fuente
Respuestas:
De los documentos angulares
La razón de esto es que cuando visita por primera vez la página (
/about
), por ejemplo, después de una actualización, el navegador no tiene forma de saber que esta no es una URL real, por lo que continúa y la carga. Sin embargo, si ha cargado primero la página raíz y todo el código de JavaScript, cuando navegue a/about
Angular puede ingresar allí antes de que el navegador intente acceder al servidor y manejarlo en consecuenciafuente
$routeProvider
y cambiar los caminos de cada uno,templateUrl
por ejemplo, detemplateUrl : '/views/about.html',
atemplateUrl : 'example.com/views/about.html',
?Hay algunas cosas que configurar para que se vea su enlace en el navegador
http://yourdomain.com/path
y estos son su configuración angular + servidor1) AngularJS
2) lado del servidor, solo ponlo
.htaccess
dentro de tu carpeta raíz y pegaMás cosas interesantes para leer sobre el modo html5 en angularjs y la configuración requerida para diferentes entornos https://github.com/angular-ui/ui-router/wiki/Frequency-Asked-Questions#how-to-configure-your-server -to-trabajar-con-html5mode También esta pregunta podría ayudarlo a $ location / cambiar entre html5 y el modo hashbang / reescritura de enlaces
fuente
Tuve un problema similar y lo resolví de la siguiente manera:
Utilizando
<base href="https://stackoverflow.com/index.html">
en la página de índiceUsando un middleware catch all route en mi nodo / servidor Express de la siguiente manera (póngalo después del enrutador):
Creo que eso debería ponerte en marcha.
Si usa un servidor apache, es posible que desee modificar_escribir sus enlaces. No es dificil de hacer. Solo unos pocos cambios en los archivos de configuración.
Todo lo que se supone es que tiene activado html5mode en angularjs. Ahora. tenga en cuenta que en angular 1.2, declarar una URL base ya no se recomienda en realidad.
fuente
<base href="https://stackoverflow.com/">
y agregando el enrutamiento Express que sugirió. Mucho gracias.<base href="https://stackoverflow.com/index.html">
?Solución para BrowserSync y Gulp.
Desde https://github.com/BrowserSync/browser-sync/issues/204#issuecomment-102623643
Primera instalación
connect-history-api-fallback
:Luego agréguelo a su archivo gulpfile.js:
fuente
server: { ... }, port: 8100
, es decir , simplemente agregue laserve
tarea a su tarea de trago predeterminada (es decirgulp.task('default', ['sass', 'serve']);
), y luego puede ejecutar la aplicación sin losCannot GET ...
errores del navegador cuando actualiza la página ejecutandogulp
. Tenga en cuenta que ejecutar el servidor conionic serve
todavía encuentra los errores.Debe configurar su servidor para reescribir todo en index.html para cargar la aplicación:
https://github.com/angular-ui/ui-router/wiki/Frequency-Asked-Questions#wiki-how-to-configure-your-server-to-work-with-html5mode
fuente
try_files $uri $uri/ /index.php?...
lugar de la necesariaindex.html
. Gracias por el enlace!Escribí un middleware de conexión simple para simular la reescritura de url en proyectos grunt. https://gist.github.com/muratcorlu/5803655
Puedes usar así:
fuente
$routeProvider
?urlRewrite
una advertencia no definida cuando intento ejecutarlo, y me cuesta encontrar la conexión correcta con reescritura que pueda usar.Si está en .NET stack con MVC con AngularJS, esto es lo que debe hacer para eliminar el '#' de la URL:
Configure su href base en su página _Diseño:
<head> <base href="https://stackoverflow.com/"> </head>
Luego, agregue lo siguiente en la configuración angular de su aplicación:
$locationProvider.html5Mode(true)
Arriba eliminará '#' de la URL, pero la actualización de la página no funcionará, por ejemplo, si está en "yoursite.com/about", la actualización de la página le dará un 404. Esto se debe a que MVC no sabe sobre el enrutamiento angular y por el patrón MVC buscará una página MVC para "acerca de" que no existe en la ruta de enrutamiento MVC. La solución para esto es enviar todas las solicitudes de página MVC a una sola vista MVC y puede hacerlo agregando una ruta que capture todas las URL
fuente
Regla de reescritura de URL de IIS para evitar errores 404 después de actualizar la página en html5mode
Para la ejecución angular bajo IIS en Windows
Rutas NodeJS / ExpressJS para evitar el error 404 después de la actualización de la página en html5mode
Para funcionamiento angular bajo Node / Express
Más información en: AngularJS: habilite la actualización de la página en modo HTML5 sin errores 404 en NodeJS e IIS
fuente
Como otros han mencionado, debe reescribir las rutas en el servidor y configurarlas
<base href="https://stackoverflow.com/"/>
.Para
gulp-connect
:npm install connect-pushstate
fuente
Estoy usando apache (xampp) en mi entorno de desarrollo y apache en la producción, agregue:
al .htaccess resuelve para mí este problema.
fuente
Para Grunt y Browsersync, use connect-modrewrite aquí
fuente
npm install connect-modrewrite --save
2.require in gruntfile
3. copie el obj del servidor anteriorResolví a
fuente
Estoy respondiendo esta pregunta de la pregunta más grande:
Cuando tiene habilitado html5Mode, el carácter # ya no se utilizará en sus URL. El símbolo # es útil porque no requiere configuración del lado del servidor. Sin #, la url se ve mucho mejor, pero también requiere reescrituras del lado del servidor. Aquí hay unos ejemplos:
Para Express Rewrites con AngularJS, puede resolver esto con las siguientes actualizaciones:
y
y
fuente
Creo que su problema es con respecto al servidor. La documentación angular con respecto al modo HTML5 (en el enlace de su pregunta) dice:
Lado del servidor 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)
Creo que tendrá que configurar una reescritura de url de / about a /.
fuente
Tuvimos una redirección de servidor en Express:
y seguíamos teniendo problemas de actualización de página, incluso después de agregar el
<base href="https://stackoverflow.com/" />
.Solución: asegúrese de utilizar enlaces reales en su página para navegar; no escriba la ruta en la URL o obtendrá una actualización de la página. (error tonto, lo sé)
:-PAGS
fuente
Finalmente, obtuve una manera de resolver este problema por parte del servidor, ya que es más como un problema con AngularJs en sí, estoy usando 1.5 Angularjs y obtuve el mismo problema al volver a cargar la página. Pero después de agregar el siguiente código en mi
server.js
archivo, me salva el día, pero no es una solución adecuada o no es una buena manera.fuente
He encontrado aún mejor el complemento Grunt, que funciona si tienes tu index.html y Gruntfile.js en el mismo directorio;
Después de eso en tu Gruntfile:
fuente
fuente
Tuve el mismo problema con la aplicación Java + angular generada con JHipster . Lo resolví con Filter y la lista de todas las páginas angulares en propiedades:
application.yml:
AngularPageReloadFilter.java
WebConfigurer.java
Espero que sea útil para alguien.
fuente
Gulp + browserSync:
Instale connect-history-api-fallback a través de npm, luego configure su tarea de servicio gulp
fuente
Su código del lado del servidor es JAVA, luego siga los siguientes pasos
Paso 1: Descargar urlrewritefilter JAR Haz clic aquí y guárdelo para crear la ruta WEB-INF / lib
paso 2: Habilita el modo HTML5 $ locationProvider.html5Mode (verdadero);
Paso 3: establecer la URL base
<base href="https://stackoverflow.com/example.com/"/>
Paso 4: copia y pega en tu WEB.XML
Paso 5: crea el archivo en WEN-INF / urlrewrite.xml
fuente
Tengo esta solución simple que he estado usando y funciona.
En App / Exceptions / Handler.php
Agregue esto en la parte superior:
Luego dentro del método de renderizado
fuente
He resuelto el problema agregando el fragmento de código a continuación en el archivo node.js.
Nota: cuando refresquemos la página, buscará la API en lugar de la página angular (debido a que no hay una etiqueta # en la URL). Usando el código anterior, estoy redirigiendo a la url con #
fuente
Simplemente escriba una regla en web.config
En el índice agregue esto
funciona para mí tal vez te hayas olvidado de configurar Html5Mode app.config
fuente