Saya belum benar-benar memperhatikan Pengalihan ini (301) ketika meminta url seperti ini tanpa garis miring ("/") di akhir: http://server/directory
Server akan merespons dengan tajuk 301 Redirect Permanent dengan tajuk Lokasi http://server/directory/
.
Lihat contoh langsung ini:
Permintaan pengguna:
GET /social HTTP/1.1
( http://192.168.1.111/social )
Respon Server Apache:
HTTP/1.1 301 Moved Permanently
Location: http://192.168.1.111/social/
Permintaan pengguna:
GET /social/ HTTP/1.1
( http://192.168.1.111/social/ )
Respon Server Apache:
HTTP/1.1 200 OK
Apache access.log:
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social HTTP/1.1" 301 558 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
-
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social/ HTTP/1.1" 200 942 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
Direktori / social / berisi index.html
file.
Perangkat Lunak Apache: Apache/2.2.22 (Ubuntu)
Opsi Direktori:Options Indexes FollowSymLinks MultiViews
Jadi, pertanyaan saya adalah: Mengapa apache melakukan ini? Dan bagaimana cara mencegah pengalihan dan mengirimkan index.html
langsung? Klien harus mengirim dua permintaan yang sebenarnya tidak perlu. Dan mungkin beberapa klien tidak mengizinkan Pengalihan dan tidak akan dapat pergi ke situs tanpa garis miring ("/").
Saya tidak ingin menonaktifkan pengalihan. Saya tidak ingin server untuk mengirimkan respons secara langsung tanpa arahan ulang. Bahkan saat meminta /social
.
Apakah apache dirancang untuk mengarahkan permintaan itu? Server bisa saja mengirim data tanpa mengarahkan ulang, kan? Haruskah saya menggunakan mod_rewrite
untuk mencegah ini? Atau konfigurasi lain? Atau haruskah saya membiarkannya seperti ini dan menambahkan garis miring di akhir semua tautan html dan hidup dengan beberapa arahan ulang?
apa yang kalian pikirkan?
/social
dalam contoh Anda.index.html
tanpa redirect/social
. (Selain itu, secara umum, menyajikan konten yang sama di beberapa url biasanya tidak diinginkan.)Jawaban:
Mengirim data tanpa redirect akan memutus tautan relatif. Jika
http://server/directory
berisifile
, maka URL lengkap untuk itu adalahhttp://server/directory/file
. Tautan yang ditentukan seperti<a href="file">
akan menunjukkanhttp://server/directory/file
apakah URL dasar adalahhttp://server/directory/
, tetapi jika URL dasar hanyahttp://server/directory
itu yang akan menunjukhttp://server/file
, bukan hasil yang diinginkan.Apache dapat membuat daftar direktori dengan dua cara berbeda tergantung pada URL alih-alih pengarahan ulang. Namun itu tidak akan berfungsi jika ada
index.html
file di direktori. Jadi, bukannya Apache menggunakan pendekatan, yang bekerja dalam kedua kasus.Ini bukan perilaku baru, satu dekade lalu Apache berperilaku dengan cara yang sama. Klien yang tidak dapat menangani pengalihan seharusnya sudah diperbaiki sekarang. Tetapi untuk setiap klien yang tidak dapat menangani pengalihan, Apache harus mengirimkan file html kecil dengan tautan yang bisa diikuti.
sumber
mod_dir
menambahkan pengalihan ini, dan Anda dapat menonaktifkannya denganDirectorySlash Off
arahan.Namun, perhatikan bahwa menonaktifkan trailing slash redirect dapat menyebabkan beberapa halaman rusak. Jika halaman yang dikembalikan berisi tautan relatif, maka URL-URL itu akan menyelesaikan secara berbeda jika halaman disajikan tanpa garis miring.
sumber