Saya memiliki proyek seed AngularJS dan saya telah menambahkan
$locationProvider.html5Mode(true).hashPrefix('!');
ke file app.js. Saya ingin mengkonfigurasi IIS 7 untuk merutekan semua permintaan
http://localhost/app/index.html
sehingga ini bekerja untuk saya. Bagaimana saya melakukan ini?
Memperbarui:
Saya baru saja menemukan, mengunduh dan menginstal modul Penulisan Ulang URL IIS , berharap ini akan membuatnya mudah dan jelas untuk mencapai tujuan saya.
Pembaruan 2 :
Saya kira ini merangkum apa yang saya coba capai (diambil dari dokumentasi Pengembang AngularJS ):
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)
Pembaruan 3:
Saya masih mengerjakan ini dan saya menyadari bahwa saya TIDAK perlu mengarahkan ulang (memiliki aturan yang menulis ulang) URL tertentu seperti
http://localhost/app/lib/angular/angular.js
http://localhost/app/partials/partial1.html
jadi apa pun yang ada di direktori css, js, lib, atau parsial tidak dialihkan. Semua yang lain perlu diarahkan ke app / index.html
Adakah yang tahu cara mencapai ini dengan mudah tanpa harus menambahkan aturan untuk setiap file?
Pembaruan 4:
Saya memiliki 2 aturan masuk yang ditentukan dalam modul Penulisan Ulang URL IIS. Aturan pertama adalah:
Aturan kedua adalah:
Sekarang ketika saya menavigasi ke localhost / app / view1 memuat halaman, namun file pendukung (yang ada di direktori css, js, lib dan partials) juga sedang ditulis ulang ke halaman app / index.html - jadi semuanya akan datang kembali sebagai halaman index.html apa pun URL yang digunakan. Saya kira ini berarti aturan pertama saya, yang seharusnya mencegah URL ini diproses oleh aturan kedua, tidak berfungsi .. ada ide? ...siapa saja? ...Saya merasa begitu sendirian... :-(
sumber
app/index.html
dan tidakapp/
secara eksplisit memicu halaman yang menyajikan AngularJS. saya kehilangan 2 jam hidup saya sebelum saya menemukan jawabannya. :-)Jawaban:
Saya menulis aturan di web.config setelah
$locationProvider.html5Mode(true)
diaturapp.js
.Semoga, bantu seseorang keluar.
Di index.html saya menambahkan ini ke
<head>
Jangan lupa untuk menginstal IIS URL Rewrite di server.
Juga jika Anda menggunakan Web API dan IIS, ini akan berfungsi jika API Anda berada di
www.yourdomain.com/api
karena input ketiga (kondisi baris ketiga).sumber
Aturan masuk IIS seperti yang ditunjukkan dalam pertanyaan DO berfungsi. Saya harus menghapus cache browser dan menambahkan baris berikut di bagian atas
<head>
halaman index.html saya:Ini karena saya memiliki lebih dari satu aplikasi di localhost dan permintaan untuk parsial lainnya sedang dibawa ke
localhost/app/view1
bukannyalocalhost/myApplication/app/view1
Semoga ini bisa membantu seseorang!
sumber
Dalam kasus saya, saya terus mendapatkan 403.14 setelah saya mengatur aturan penulisan ulang yang benar. Ternyata saya memiliki direktori dengan nama yang sama dengan salah satu rute URL saya. Setelah saya menghapus aturan penulisan ulang IsDirectory, rute saya berfungsi dengan benar. Apakah ada kasus di mana menghapus negasi direktori dapat menyebabkan masalah? Saya tidak bisa memikirkan apa pun dalam kasus saya. Satu-satunya kasus yang dapat saya pikirkan adalah jika Anda dapat menelusuri direktori dengan aplikasi Anda.
sumber
Masalah dengan hanya memiliki dua kondisi ini:
adalah bahwa mereka hanya berfungsi selama
{REQUEST_FILENAME}
ada secara fisik pada disk . Ini berarti bahwa mungkin ada skenario di mana permintaan untuk tampilan parsial dengan nama yang salah akan mengembalikan halaman root alih-alih 404 yang akan menyebabkan sudut dimuat dua kali (dan dalam skenario tertentu dapat menyebabkan loop tak terhingga yang tak terhingga).Karenanya, beberapa aturan "fallback" yang aman akan direkomendasikan untuk menghindari masalah yang sulit dipecahkan ini:
atau suatu kondisi yang cocok dengan akhiran file apa pun :
sumber
Cara termudah yang saya temukan adalah hanya mengarahkan permintaan yang memicu 404 ke klien. Ini dilakukan dengan menambahkan tagar bahkan ketika
$locationProvider.html5Mode(true)
diatur.Trik ini berfungsi untuk lingkungan dengan Aplikasi Web yang lebih banyak di Situs Web yang sama dan memerlukan batasan integritas URL (EG external authentication). Berikut langkah demi langkah gimana caranya
index.html
Atur
<base>
elemen dengan benarweb.config
Redirect pertama 404 ke halaman kustom, misalnya "Rumah / Kesalahan"
Pengontrol rumah
Terapkan
ActionResult
input "terjemahan" yang sederhana ke rute yang berada di sisi klien.Ini adalah cara paling sederhana.
Dimungkinkan (disarankan?) Untuk meningkatkan fungsi Kesalahan dengan beberapa logika yang ditingkatkan untuk mengarahkan 404 ke klien hanya ketika url valid dan membiarkan pemicu 404 secara normal ketika tidak ada yang ditemukan pada klien. Katakanlah Anda memiliki rute sudut ini
Masuk akal untuk mengarahkan ulang URL ke klien hanya ketika dimulai dengan "/ Baru" atau "/ Tampilkan /"
Ini hanyalah contoh dari logika yang ditingkatkan, tentu saja setiap aplikasi web memiliki kebutuhan yang berbeda
sumber
Saya sudah mencoba untuk menyebarkan aplikasi Angular 7 sederhana, ke Aplikasi Web Azure. Semuanya berfungsi dengan baik, sampai pada titik di mana Anda me-refresh halaman. Melakukan hal itu, mempresentasikan saya dengan 500 kesalahan - pindah konten. Saya telah membaca dokumen Angular dan di sekitar beberapa forum yang bagus, bahwa saya perlu menambahkan file web.config ke solusi yang saya gunakan dan memastikan aturan penulisan ulang mundur ke file index.html. Setelah berjam-jam frustrasi dan uji coba dan kesalahan, saya menemukan kesalahan itu cukup sederhana: menambahkan tag di sekitar markup file saya.
sumber
Saya memiliki masalah serupa dengan Angular dan IIS melemparkan kode status 404 pada penyegaran manual dan mencoba solusi yang paling banyak dipilih tetapi itu tidak berhasil untuk saya. Juga mencoba banyak solusi lain yang harus berurusan dengan WebDAV dan mengubah penangan dan tidak ada yang berhasil.
Untungnya saya menemukan solusi ini dan berhasil (mengeluarkan bagian yang tidak saya butuhkan). Jadi, jika tidak ada di atas yang berfungsi untuk Anda atau bahkan sebelum mencobanya, coba ini dan lihat apakah itu memperbaiki penyebaran sudut Anda pada masalah iis.
Tambahkan snippet ke konfigurasi web Anda di direktori root situs Anda. Dari pemahaman saya, ini menghapus kode status 404 dari warisan apa pun (applicationhost.config, machine.config), kemudian membuat kode status 404 di tingkat situs dan mengarahkan kembali ke halaman beranda sebagai halaman 404 khusus.
sumber