Kami memiliki aplikasi perusahaan yang menggunakan Angular 2 untuk klien. Setiap pelanggan kami memiliki url uniknya sendiri, mis .: https://our.app.com/customer-one
dan https://our.app.com/customer-two
. Saat ini kami dapat mengatur <base href...>
secara dinamis menggunakan document.location
. Jadi pengguna hits https://our.app.com/customer-two
dan <base href...>
bersiap untuk /customer-two
... sempurna!
Masalahnya adalah jika pengguna misalnya di https://our.app.com/customer-two/another-page
dan mereka menyegarkan halaman atau mencoba untuk menekan url itu secara langsung, <base href...>
set ke /customer-two/another-page
dan sumber daya tidak dapat ditemukan.
Kami telah mencoba yang berikut ini tetapi tidak berhasil:
<!doctype html>
<html>
<head>
<script type='text/javascript'>
var base = document.location.pathname.split('/')[1];
document.write('<base href="https://stackoverflow.com/' + base + '" />');
</script>
...
Sayangnya kami kehabisan ide. Bantuan apa pun akan luar biasa.
Jawaban:
Jawaban yang ditandai di sini tidak menyelesaikan masalah saya, kemungkinan versi sudut yang berbeda. Saya dapat mencapai hasil yang diinginkan dengan
angular cli
perintah berikut di terminal / shell:ng build --base-href /myUrl/
ng build --bh /myUrl/
ataung build --prod --bh /myUrl/
Ini mengubah
<base href="https://stackoverflow.com/">
ke<base href="https://stackoverflow.com/myUrl/">
dalam versi yang dibangun hanya yang sempurna untuk perubahan kami di lingkungan antara pengembangan dan produksi. Bagian terbaiknya adalah tidak ada basis kode yang perlu diubah menggunakan metode ini.Untuk meringkas, biarkan
index.html
href dasar Anda sebagai:<base href="https://stackoverflow.com/">
lalu jalankanng build --bh ./
dengan cli sudut untuk menjadikannya jalur relatif, atau ganti./
dengan apa pun yang Anda butuhkan.Memperbarui:
Seperti contoh di atas yang menunjukkan cara melakukannya dari baris perintah, berikut adalah cara menambahkannya ke file konfigurasi angular.json Anda.
Ini akan digunakan untuk semua
ng serving
untuk pembangunan lokalIni adalah konfigurasi khusus untuk build konfigurasi seperti prod:
The resmi
angular-cli
dokumentasi mengacu pada penggunaan.sumber
./
berfungsi untuk semua lokasi. Jadi sebenarnya menurut saya Anda tidak harus membangun per klien../
sangat berbeda. Ini berfungsi sampai pengguna menavigasi ke sebuah rute dan menekan tombol atau tombol segarkan browser. Pada saat itu, penulisan ulang kami menangani panggilan tersebut, menyajikan halaman indeks, tetapi browser menganggap itu./
adalah rute saat ini, bukan folder root aplikasi web. Kami memecahkan masalah OP dengan indeks dinamis (.aspx, .php, .jsp, dll) yang menetapkan href dasar.--prod
selama pembuatan tidak akan mengubahbase href
nilai Anda, Anda tidak boleh membicarakannya di sini.--prod
memberitahuangular-cli
untuk menggunakanenvironment.prod.ts
file daripada file defaultenvironment.ts
dienvironments
folder Anda--prod
bendera karena mereka berbicara tentang penyebaran di OP.Inilah yang akhirnya kami lakukan.
Tambahkan ini ke index.html. Ini harus menjadi hal pertama di
<head>
bagian iniKemudian di
app.module.ts
file tersebut, tambahkan{ provide: APP_BASE_HREF, useValue: window['_app_base'] || '/' }
ke daftar penyedia, seperti:sumber
useValue: (window as any) ['_app_base'] || '/'
membantuBerdasarkan jawaban (@sharpmachine) Anda, saya dapat sedikit melakukan refaktorisasi lebih lanjut, sehingga kami tidak perlu meretas fungsi di
index.html
.Dan,
./shared/common-functions.util.ts
berisi:sumber
http://localhost:8080/subfolder/myapp/#/subfolder/myroute
Apakah ini tampilan Anda? Apakah Anda tahu cara membuang subfolder setelah # agar bisa begitu sajahttp://localhost:8080/subfolder/myapp/#/myroute
?base href
hanya diperlukan untukLocationStrategy
AFAIK. Adapun menulis kode khusus untuk menangani penyegaran dengan LocationStrategy, tidak yakin apa yang Anda maksud sebenarnya. Apakah Anda bertanya, bagaimana jika "basis href" saya berubah selama aktivitas di aplikasi saya? Lalu, ya, saya harus melakukan hal yang kotor seperti diwindow.location.href = '/' + newBaseHref;
mana ia harus diubah. Saya tidak terlalu bangga akan hal itu. Juga, untuk memberikan pembaruan, saya menjauh dari solusi peretasan ini di aplikasi saya karena itu menjadi masalah desain bagi saya. Parameter router berfungsi dengan baik, jadi saya tetap menggunakannya.appRoutingProvider
penampilan Anda , Krishnan? Saya melihat jawaban yang diterima digunakan sama; mungkin Anda hanya menyalinnyaproviders
, tetapi jika tidak, dapatkah Anda memberi saya sampel atau menjelaskan tujuannya? The dokumentasi sajaimports
Routing modul , tidak menggunakan terkait routing penyedia (sejauh yang saya bisa melihat)location /subfolder/myapp/ { try_files $uri /subfolder/myapp/index.html; } location /subfolder2/myapp/ { try_files $uri /subfolder2/myapp/index.html; }
Saya menggunakan direktori kerja saat ini
./
ketika membangun beberapa aplikasi dari domain yang sama:Di samping catatan, saya gunakan
.htaccess
untuk membantu perutean saya saat memuat ulang halaman:sumber
.htaccess
filenya<base href="./">
salah dan akan mengacaukan rute seperti/app/a/b/c
memang, coba saja. Lebih suka mengatur href dasar sendiri jika hanya berurusan dengan aplikasi web atau lihat cara sudut mengubah href dasar saat menerapkan (ada banyak jawaban di sini yang menyebutkan ini).Penyederhanaan jawaban yang ada oleh @sharpmachine .
Anda tidak perlu menentukan tag dasar di index.html Anda, jika Anda memberikan nilai untuk token buram APP_BASE_HREF.
sumber
Ini bekerja dengan baik untuk saya di lingkungan produksi
sumber
Di angular4, Anda juga dapat mengonfigurasi baseHref di aplikasi .angular-cli.json.
di .angular-cli.json
ini akan memperbarui basis href di index.html menjadi MY_APP_BASE_HREF_1
sumber
Jika Anda menggunakan Angular CLI 6, Anda dapat menggunakan opsi deployUrl / baseHref di angular.json (proyek> xxx> arsitek> build> konfigurasi> produksi). Dengan cara ini, Anda dapat dengan mudah menentukan baseUrl per proyek.
Periksa apakah pengaturan Anda sudah benar dengan melihat index.html dari aplikasi yang dibangun.
sumber
Add-ons: Jika Anda menginginkan mis: / users sebagai basis aplikasi untuk router dan / public sebagai basis untuk penggunaan aset
sumber
Punya masalah serupa, sebenarnya saya akhirnya menyelidiki keberadaan beberapa file di web saya.
probePath akan menjadi URL relatif ke file yang ingin Anda periksa (semacam penanda jika Anda sekarang berada di lokasi yang benar), misalnya 'assets / images / thisImageAlwaysExists.png'
sumber
Dalam package.json setel flag --base-href ke jalur relatif:
sumber
Terus terang, kasus Anda berfungsi dengan baik untuk saya!
Saya menggunakan Angular 5.
sumber
Saya baru saja mengubah:
untuk ini:
jangan lupa diakhiri dengan /
sumber