Capire cosa serve per rimuovere l’hash # dalle rotte angolari

Prima di rimuovere il cancelletto ho avuto

mainApp.config(function ($locationProvider, $routeProvider) { $routeProvider .when('/page', { controller: 'Page', templateUrl: 'templates/page.html' }) .when('/main', { controller: 'Main', templateUrl: 'templates/main.html' }) .otherwise({ redirectTo: '/main'}); //$locationProvider.html5Mode(true); }); 

e questi hanno funzionato bene

 http://localhost:8080/index.html#/main http://localhost:8080/index.html#/page 

Dopo aver rimosso il cancelletto, ho aggiunto index.html

  
        

e per index.js

 $locationProvider.html5Mode(true); 

ora colpendo http://localhost:8080 reindirizza a http://localhost:8080/main

    ma andando a http://localhost:8080/main direttamente nel browser restituisce 404 e anche le altre pagine

    Cosa devo fare per risolvere il problema?

    il mio backend è java

    Questo è previsto. Ecco cosa succede quando html5 non è attivo:

    • inserisci l’URL http://localhost:8080/index.html#/main nella barra degli indirizzi
    • il browser effettua una richiesta http su localhost: 8080 / index.html e ottiene la pagina html come risposta
    • la pagina html contiene un’applicazione angular che viene eseguita. Il router angular analizza il percorso dopo l’hash (/ main), e quindi carica la vista e il controller associati

    Ora cosa succede quando abiliti la modalità html5 e carichi index.hml?

    • inserisci l’URL http://localhost:8080/index.html nella barra degli indirizzi
    • il browser effettua una richiesta http su localhost: 8080 / index.html e ottiene la pagina html come risposta
    • la pagina html contiene un’applicazione angular che viene eseguita. Il router angular analizza il percorso (/index.html), vede che non corrisponde a nessun percorso e pertanto modifica la posizione nella barra degli indirizzi sul valore predefinito: / main, quindi carica la vista e il controller associati. Cambiando la posizione nella barra degli indirizzi, il browser non fa altro che aggiungere una nuova voce nella cronologia di navigazione.

    Ora, cosa succede se si preme refresh o direttamente http://localhost:8080/main nella barra degli indirizzi? Beh, in questo caso, stai dicendo al browser: “carica la pagina http://localhost:8080/main ecco cosa fa il browser: invia una richiesta HTTP a http://localhost:8080/main Poiché il server non ha nulla a questo indirizzo, restituisce un 404.

    Ora come farlo funzionare? In realtà è abbastanza semplice: è necessario configurare il server per inviare indietro la pagina index.html quando riceve una richiesta per il percorso /main (e per tutti gli altri percorsi dell’applicazione angular). In questo modo, il browser caricherà la pagina HTML, l’applicazione angular in esso contenuta verrà riavviata, il router angular analizzerà il percorso ( /main ) dall’URL e quindi caricherà la vista e il controller associato a quel percorso.