Saya ingin mengaktifkan mode HTML5 untuk aplikasi saya. Saya telah meletakkan kode berikut untuk konfigurasi, seperti yang ditunjukkan di sini :
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'
});
Seperti yang Anda lihat, saya menggunakan $locationProvider.html5mode
dan saya mengubah semua tautan saya di ng-href
untuk mengecualikan /#/
.
Masalah
Saat ini, saya dapat pergi ke localhost:9000/
dan melihat halaman indeks dan menavigasi ke halaman lain seperti localhost:9000/about
.
Namun, masalah terjadi ketika saya me-refresh localhost:9000/about
halaman. Saya mendapatkan output berikut:Cannot GET /about
Jika saya melihat panggilan jaringan:
Request URL:localhost:9000/about
Request Method:GET
Sementara jika saya pertama kali pergi ke localhost:9000/
dan kemudian klik tombol yang menavigasi ke /about
saya dapatkan:
Request URL:http://localhost:9000/views/about.html
Yang merender halaman dengan sempurna.
Bagaimana saya bisa mengaktifkan sudut untuk mendapatkan halaman yang benar ketika saya menyegarkan?
sumber
Jawaban:
Dari dokumen sudut
Alasan untuk ini adalah bahwa ketika Anda pertama kali mengunjungi halaman (
/about
), misalnya setelah refresh, browser tidak memiliki cara untuk mengetahui bahwa ini bukan URL asli, jadi ia melanjutkan dan memuatnya. Namun jika Anda telah memuat halaman root terlebih dahulu, dan semua kode javascript, maka ketika Anda menavigasi ke/about
Angular dapat masuk ke sana sebelum browser mencoba untuk menekan server dan menanganinya sesuaisumber
$routeProvider
dan mengubah jalur masing-masingtemplateUrl
misalnya daritemplateUrl : '/views/about.html',
ketemplateUrl : 'example.com/views/about.html',
?Ada beberapa hal yang perlu diatur sehingga tautan Anda di browser akan terlihat seperti
http://yourdomain.com/path
dan ini adalah sisi konfigurasi + server Anda1) AngularJS
2) sisi server, cukup masukkan ke
.htaccess
dalam folder root Anda dan rekatkan iniLebih banyak hal menarik untuk dibaca tentang mode html5 di angularjs dan konfigurasi yang diperlukan per lingkungan yang berbeda https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server -untuk bekerja dengan html5mode Juga pertanyaan ini mungkin membantu Anda $ lokasi / beralih antara html5 dan mode hashbang / penulisan ulang tautan
sumber
Saya memiliki masalah yang sama dan saya menyelesaikannya dengan:
Menggunakan
<base href="https://stackoverflow.com/index.html">
di halaman indeksMenggunakan catch all route middleware di node / Express server saya sebagai berikut (letakkan setelah router):
Saya pikir itu harus membuat Anda bangun dan berjalan.
Jika Anda menggunakan server apache, Anda mungkin ingin mod_rewrite tautan Anda. Itu tidak sulit untuk dilakukan. Hanya beberapa perubahan dalam file konfigurasi.
Semua itu dengan asumsi Anda telah mengaktifkan html5mode di angularjs. Sekarang. perhatikan bahwa dalam sudut 1.2, mendeklarasikan url basis tidak direkomendasikan lagi sebenarnya.
sumber
<base href="https://stackoverflow.com/">
dan menambahkan perutean Express yang Anda sarankan. Terima kasih banyak.<base href="https://stackoverflow.com/index.html">
?Solusi untuk BrowserSync dan Gulp.
Dari https://github.com/BrowserSync/browser-sync/issues/204#issuecomment-102623643
Instal pertama
connect-history-api-fallback
:Kemudian tambahkan ke gulpfile.js Anda:
sumber
server: { ... }, port: 8100
, kemudian tambahkanserve
tugas ke tugas tegukan default Anda (yaitugulp.task('default', ['sass', 'serve']);
), dan kemudian Anda dapat menjalankan aplikasi tanpaCannot GET ...
kesalahan browser saat Anda me-refresh halaman dengan menjalankangulp
. Perhatikan bahwa menjalankan server denganionic serve
masih menemukan kesalahan.Anda perlu mengonfigurasi server Anda untuk menulis ulang semuanya menjadi index.html untuk memuat aplikasi:
https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#wiki-how-to-configure-your-server-to-work-with-html5mode
sumber
try_files $uri $uri/ /index.php?...
pengganti yang dibutuhkanindex.html
. Terima kasih untuk tautannya!Saya menulis middleware connect sederhana untuk mensimulasikan url-penulisan ulang pada proyek-proyek kasar https://gist.github.com/muratcorlu/5803655
Anda bisa menggunakan seperti itu:
sumber
$routeProvider
?urlRewrite
peringatan ketika mencoba menjalankannya, dan saya kesulitan menemukan koneksi yang tepat dengan penulisan ulang yang dapat saya gunakan.Jika Anda berada di .NET stack dengan MVC dengan AngularJS, inilah yang harus Anda lakukan untuk menghapus '#' dari url:
Siapkan markas Anda di halaman _Layout Anda:
<head> <base href="https://stackoverflow.com/"> </head>
Lalu, tambahkan berikut ini di konfigurasi aplikasi sudut Anda:
$locationProvider.html5Mode(true)
Di atas akan menghapus '#' dari url tetapi penyegaran halaman tidak akan berfungsi misalnya jika Anda berada di penyegaran halaman "yoursite.com/about" akan memberi Anda 404. Ini karena MVC tidak tahu tentang perutean sudut dan menurut pola MVC. akan mencari halaman MVC untuk 'about' yang tidak ada di jalur routing MVC. Solusi untuk ini adalah mengirim semua permintaan halaman MVC ke tampilan MVC tunggal dan Anda dapat melakukannya dengan menambahkan rute yang menangkap semua url
sumber
Aturan penulisan ulang URL IIS untuk mencegah kesalahan 404 setelah refresh halaman di html5mode
Untuk menjalankan sudut di bawah IIS pada Windows
NodeJS / ExpressJS Rute untuk mencegah 404 kesalahan setelah penyegaran halaman di html5mode
Untuk menjalankan sudut di bawah Node / Ekspres
Info lebih lanjut di: AngularJS - Aktifkan Halaman Mode HTML5 Refresh Tanpa 404 Kesalahan di NodeJS dan IIS
sumber
Seperti yang disebutkan orang lain, Anda perlu menulis ulang rute di server dan mengaturnya
<base href="https://stackoverflow.com/"/>
.Untuk
gulp-connect
:npm install connect-pushstate
sumber
Saya menggunakan apache (xampp) di lingkungan dev saya dan apache di bagian produksi, tambahkan:
untuk memecahkan .htaccess untuk saya masalah ini.
sumber
Untuk Grunt dan Browsersync gunakan connect-modrewrite di sini
sumber
npm install connect-modrewrite --save
2.require in gruntfile
3. salin objek server di atasSaya memecahkannya
sumber
Saya menjawab pertanyaan ini dari pertanyaan yang lebih besar:
Ketika Anda mengaktifkan html5Mode, karakter # tidak akan lagi digunakan di url Anda. Simbol # berguna karena tidak memerlukan konfigurasi sisi server. Tanpa #, url terlihat jauh lebih baik, tetapi juga membutuhkan penulisan ulang sisi server. Berikut ini beberapa contohnya:
Untuk Express Rewrites dengan AngularJS, Anda dapat menyelesaikannya dengan pembaruan berikut:
dan
dan
sumber
Saya yakin masalah Anda berkaitan dengan server. Dokumentasi sudut berkaitan dengan mode HTML5 (pada tautan dalam pertanyaan Anda) menyatakan:
Sisi server Menggunakan mode ini memerlukan penulisan ulang URL di sisi server, pada dasarnya Anda harus menulis ulang semua tautan Anda ke titik masuk aplikasi Anda (mis. Index.html)
Saya yakin Anda perlu mengatur penulisan ulang url dari / about to /.
sumber
Kami memiliki pengalihan server di Express:
dan kami masih mendapatkan masalah penyegaran laman, bahkan setelah kami menambahkan
<base href="https://stackoverflow.com/" />
.Solusi: pastikan Anda menggunakan tautan nyata di halaman Anda untuk bernavigasi; jangan mengetikkan rute di URL atau Anda akan mendapatkan refresh halaman. (Kesalahan konyol, aku tahu)
:-P
sumber
Akhirnya saya mendapatkan cara untuk menyelesaikan masalah ini dari sisi server karena ini lebih seperti masalah dengan AngularJs itu sendiri. Saya menggunakan 1,5 Angularjs dan saya mendapatkan masalah yang sama saat memuat ulang halaman. Tetapi setelah menambahkan kode di bawah ini dalam
server.js
file saya itu menghemat hari saya tetapi itu bukan solusi yang tepat atau bukan cara yang baik.sumber
Saya telah menemukan plugin Grunt yang lebih baik, yang berfungsi jika Anda memiliki index.html dan Gruntfile.js di direktori yang sama;
Setelah itu di Gruntfile Anda:
sumber
sumber
Saya memiliki masalah yang sama dengan aplikasi java + angular yang dihasilkan dengan JHipster . Saya menyelesaikannya dengan Filter dan daftar semua halaman sudut di properti:
application.yml:
AngularPageReloadFilter.java
WebConfigurer.java
Semoga bermanfaat bagi seseorang.
sumber
Gulp + browserSync:
Instal connect-history-api-fallback melalui npm, kemudian konfigurasikan tugas serve tegp Anda
sumber
Kode sisi server Anda adalah JAVA kemudian Ikuti langkah-langkah di bawah ini
langkah 1: Unduh urlrewritefilter JAR Klik Di Sini dan simpan untuk membangun jalur WEB-INF / lib
langkah 2: Aktifkan Mode HTML5 $ locationProvider.html5Mode (true);
langkah 3: atur URL dasar
<base href="https://stackoverflow.com/example.com/"/>
langkah 4: salin dan tempel ke WEB.XML Anda
langkah 5: buat file di WEN-INF / urlrewrite.xml
sumber
Saya punya solusi sederhana yang telah saya gunakan dan kerjanya.
Di App / Pengecualian / Handler.php
Tambahkan ini di atas:
Kemudian di dalam metode render
sumber
Saya telah menyelesaikan masalah dengan menambahkan potongan kode di bawah ini ke file node.js.
Catatan: saat kami me-refresh halaman, ia akan mencari API alih-alih halaman Angular (Karena tidak ada tag # di URL.). Dengan menggunakan kode di atas, saya mengarahkan ke url dengan #
sumber
Cukup tulis aturan di web.config
Dalam indeks tambahkan ini
ini berfungsi untuk saya mungkin Anda lupa mengatur Html5Mode app.config
sumber