Saya menggunakan server web apache di CentOS dan saya perlu menonaktifkan kemampuan orang untuk mengakses situs web dengan menggunakan alamat IP server di browser web. Saya menginginkannya sehingga ketika seseorang mencoba menelusuri ke alamat IP mereka mendapatkan pesan kesalahan terlarang.
Konfigurasi apa yang diperlukan untuk melakukan itu?
apache-2.2
centos
Amr Elkhedewy
sumber
sumber
Anda dapat mencapai ini dengan mod_rewrite (baik dalam
.htaccess
file, atau dalam konteks server default, atau dalam VirtualHost terpisah di manaServerName
alamat IP host):Ini mengatakan bahwa jika header HTTP_HOST cocok dengan alamat ip 1.2.3.4, maka setiap permintaan harus dipenuhi dengan a
403 Forbidden
. Permintaan apa pun yang memiliki tajuk HTTP_HOST lain (mis. Permintaan dengan nama domain sebenarnya dan bukan alamat IP) tidak boleh terpengaruh.sumber
Anda tidak dapat memblokir akses langsung dengan IP. Anda harus mengizinkan koneksi tetapi kemudian memutuskan apa yang harus dilakukan dengannya. Ini bisa mengembalikan 403, a 404 atau mengarahkan mereka ke halaman yang diinginkan. Anda dapat melakukan ini dengan mod_rewrite.
Ini akan cocok dengan tajuk HTTP HOST yang disahkan oleh klien web. Semua permintaan lain akan lewat.
Namun, Anda mungkin ingin menormalkan URL Anda untuk keperluan SEO.
Dengan pendekatan ini Anda menulis ulang apa pun yang tidak cocok dengan hasil yang diinginkan.
Referensi: https://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalurl
Referensi: http://en.wikipedia.org/wiki/URL_normalization
sumber
Solusi ini tidak mencakup semua kasus.
Ganti angka atau titik apa pun di URL IP dengan% ## misalnya 1 dengan% 31 ... 8 dengan% 38 dan Anda akan tiba di IP, bukan pada url domain.
Misalkan IP buruk ini, digunakan untuk memudahkan penjelasan: 123.45.6.789
Anda harus menggunakan 2 alternatif untuk semua digit dan titik: titik adalah% 2E dan 0..9 adalah% 30 ..% 39
Jelek, itu bisa dikurangi dengan {1,3} dan ditahan ke IP yang valid tetapi seperti untuk IP Anda, tidak perlu melakukannya.
Jangan lupa port seperti ": 80". HTTP_HOST memuatnya dan SERVER_NAME tidak dapat diandalkan.
sumber