Saya mencoba membuat url dari ini:
example.com/view.php?id=15
Untuk ini:
example.com/watch/15
Kode saya .htaccess
adalah sebagai berikut:
Options -Indexes
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^watch/([^/]+) view.php?id=$1 [NC]
Sekarang jika saya pergi ke example.com/watch/15
sana memuat konten tetapi tanpa JS, CSS karena dalam hal ini mencari CSS dan JS di bawah /watch
folder yang tidak ada.
Bagaimana cara membuat opsi ini berfungsi dengan baik? Saya tidak ingin membuat folder tontonan dan salin-tempel CSS dan JS sehingga akan disematkan dengan benar.
htaccess
relative-urls
TerjebakBetweenTrees
sumber
sumber
base
elemen yang mereferensikan URL dasar ke mana semua URL relatif relatif. @closetnoc Anda harus menambahkan itu sebagai jawaban.Jawaban:
Tidak dapat menemukan file JavaScript dan CSS Anda adalah masalah sisi klien / browser yang terkait dengan jalur URL Anda, itu bukan sesuatu yang harus diperbaiki
.htaccess
(setidaknya tidak dalam kasus ini) - meskipun itu karena Anda mengubah ini Jalur URL (di.htaccess
) tempat Anda mengalami masalah ini.Seperti yang disarankan @closetnoc dalam komentar, masalah ini disebabkan oleh penggunaan URL relatif di HTML Anda. Relatif dengan apa? Ingat, itu adalah agen-pengguna / browser yang menyelesaikan URL relatif di HTML Anda, bukan server. Jadi, Anda perlu memperbaiki URL Anda; tidak
.htaccess
.Misalnya, jika Anda mereferensikan file CSS Anda dengan URL relatif dari formulir
href="styles.css"
(catatan, tanpa awalan garis miring) dan Anda saat ini di URLexample.com/view.php?id=15
maka browser secara alami akan menyelesaikan URL dan permintaan CSS Andaexample.com/styles.css
(di root dokumen). Namun, jika Anda saat ini berada di URLexample.com/watch/15
(efektif dalam/watch
"subdirektori" [* 1] ) maka browser akan menyelesaikan URL CSS relatif Anda relatif ke/watch
subdirektori, bukan pada root dokumen, sehingga Anda berakhir dengan absolut / terselesaikan URL formulirexample.com/watch/styles.css
.( [* 1] Perhatikan bahwa "subdirektori" dalam konteks ini tidak harus berupa subdirektori fisik di server Anda - ini adalah "subdirektori" di jalur URL; segmen jalur tambahan. Namun browser tidak mengetahui perbedaannya. )
Hal yang sama berlaku jika Anda menggunakan URL relatif dalam dokumen kesalahan khusus Anda (didefinisikan dengan
ErrorDocument
arahan di Apache). Dokumen kesalahan khusus berpotensi dipanggil pada URL apa pun, sehingga URL relatif apa pun ke sumber daya statis (CSS, gambar, JS, dll.) Akan relatif terhadap URL yang menyebabkan kesalahan, bukan relatif terhadap dokumen kesalahan itu sendiri (lokasi yang secara efektif disembunyikan dari agen-pengguna).Jika Anda mengubah JavaScript dan URL CSS Anda menjadi root-relatif (dimulai dengan garis miring) atau bahkan absolut maka Anda tidak akan mendapatkan masalah ini. Ini akan menjadi metode yang disukai. Atau, Anda dapat menggunakan
base
elemen ...base
tag / elemenAtau Anda dapat memasukkan
base
elemen dihead
bagian dokumen HTML Anda (meskipun ini bukan tanpa peringatan [* 2] ). Ini referensi URL absolut bahwa semua URL relatif relatif terhadap. Dengan kata lain, karena Anda mengharapkan URL relatif ini relatif terhadap akar dokumen lalu tambahkan berikut ini kehead
bagian:Sekarang, URL relatif seperti yang
styles.css
dirujuk dalam dokumen di URL/watch/15
akan memintahttp://example.com/styles.css
, bukanhttp://example.com/watch/styles.css
.[* 2] Namun, ada beberapa peringatan dengan menggunakan
base
elemen tersebut. Perhatian utama adalah bahwa setiapURL relatif yang ditujukan untuk menargetkandokumen saat ini sekarang akan menargetkan URL dasar. Ini dapat memengaruhi jangkar di laman sepertihref="#top"
dan URL formulir,href="?sortby=date"
dll. Dan jugaform
elemen yang mengirim sendiri menggunakanaction
atributkosong(mis.<form action="" ...
). URL relatif ini yang menargetkan dokumen saat ini perlu dimodifikasi untuk memasukkan URL lengkap dari halaman saat ini (yang mungkin mengalahkan titik menggunakanbase
tag sebagai solusi untuk memulai).Referensi:
sumber