CSS, JS, dan gambar tidak ditampilkan dengan url cantik

Jan 02 2015

Saya mencoba menulis ulang URL melalui file htaccess sehingga menjadi URL berikut

www.domain.com/subfolder/index.php?key

dapat diakses oleh:

www.domain.com/subfolder/index.php/key

"kunci" yang ditentukan akan menentukan halaman mana yang akan disertakan dalam kode PHP. Saya sudah memiliki kode htaccess berikut, namun CSS, JS, gambar dan semacamnya tidak ditampilkan saat menggunakan URL kedua (bersih). Ada gagasan tentang apa yang mungkin menjadi masalahnya?

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{DOCUMENT_ROOT}/$1 -f RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC] RewriteRule ^index.php/([a-zA-Z0-9/_]+)$ index.php?key=$1

Jawaban

6 Sumurai8 Jan 02 2015 at 23:49

Saat Anda menggunakan url relatif, browser akan secara dinamis membuat url lengkap dengan menggunakan url sumber daya yang dimuatnya. Dengan kata lain: Ini menggunakan url seperti yang ditampilkan di bilah alamat. Dalam case Anda ( www.domain.com/subfolder/index.php/key) mencoba memuat url relatif apa pun yang terkait dengan www.domain.com/subfolder/index.php/. Namun sumber daya Anda tidak berada di sana.

Anda memiliki dua opsi untuk mengatasi masalah ini:

  • Ubah url relatif Anda menjadi url absolut, setidaknya mutlak ke root domain. Sesuatu seperti <img src="img/unicorn.png">harus diubah menjadi <img src="/path/to/img/unicorn.png">.

  • Tambahkan dasar ke elemen kepala Anda. Basis ini akan digunakan sebagai pengganti url sumber daya untuk menghitung url lengkap. Anda harus menambahkan elemen <base href="/">Anda <head>. /selanjutnya akan digunakan sebagai dasar dari setiap url relatif.

1 TheLilThings Mar 10 2015 at 21:54

Apakah Anda mencoba URL dasar? Itu adalah solusi terbaik yang pernah saya temukan. Cukup taruh satu di kepala dan kemudian Anda bahkan dapat memberikan ID dan mengakses URL dengan javascript.

<base id='baseElement' href="your path goes here">  <!--possibly generated with serverside code-->

Akses dengan jquery

var base = $('#baseElement').attr('href');
1 DanChaltiel Dec 07 2016 at 16:16

Sebenarnya ada solusi dengan .htaccess!

Dengan asumsi bahwa index.php Anda berada di /mysite/dan file sumber daya Anda ada di /mysite/scripts/, /mysite/images/dan /mysite/style/seperti tambang, Anda dapat melakukannya seperti ini:

RewriteEngine on
#first exclude those folders
RewriteBase "/mysite/"
RewriteRule ^(style|scripts|images)($|/) - [L] #then go with your rules (the [L] terminates the ruling) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{DOCUMENT_ROOT}/$1 -f
RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC]
RewriteRule ^index.php/([a-zA-Z0-9/_]+)$ index.php?key=$1

Anda dapat melihat .htaccess mod_rewrite - cara mengecualikan direktori dari aturan rewrite untuk beberapa cara lain

TheLilThings Mar 10 2015 at 21:59

Selain itu, Anda dapat mencoba menambahkan ini ke HTaccess Anda:

RewriteBase /