Saya memiliki server khusus dengan Apache, tempat saya mengatur beberapa VirtualHosts. Saya telah menyiapkan satu untuk menangani domain www dan juga domain non-www.
File .conf VH saya untuk www:
<VirtualHost *>
DocumentRoot /var/www/site
ServerName www.example.com
<Directory "/var/www/site">
allow from all
</Directory>
</VirtualHost>
Dengan ini .htaccess
:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Apakah ada cara sederhana untuk mengarahkan www ke versi non-www? Saat ini saya mengirim kedua versi ke yang sama DocumentRoot
dan menggunakan .htaccess
tetapi saya yakin saya harus dapat melakukannya di file VirtualHost.
apache-2.2
mod-rewrite
redirect
virtualhost
DisgruntledGoat
sumber
sumber
Jawaban:
Ternyata
mod_rewrite
aturan baik-baik saja di file VirtualHosts, terlepas dariRewriteBase
aturan. Saya berakhir dengan ini:EDIT: atas saran joschi di komentar, saya sekarang menggunakan versi sederhana ini menggunakan
Redirect
arahan darimod_alias
:sumber
:80
setelahVirtualHost *
menyebabkan semuanya kembali "Terlarang"!Berhati-hatilah dengan pengalihan 301 karena, secara default, peramban yang menerima pengalihan 301 akan menyimpannya secara permanen - artinya Anda akan menyerahkan kontrol apa yang akan dilihat peramban itu ketika ia mencoba mengakses domain
www.example.com
.Lihat misalnya diskusi ini http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/
Jadi pastikan itu tidak di-cache, atau gunakan mod_proxy (saya sarankan mod_proxy).
Jika Anda baik-baik saja dengan membiarkan pengguna melihat perubahan URL pada bilah alamat browser, gunakan mod_rewrite:
Jika Anda ingin "redirect" tidak terlihat oleh pengguna, gunakan mod_proxy:
Perlu dicatat bahwa mod_proxy, ketika dikonfigurasi dengan buruk, dapat membahayakan jaringan Anda.
sumber
Anda dapat menambahkan
ServerAlias example.com
keVirtualHost
tetapi kinerja akan berbeda dari pengalihan.Sunting
Karena Anda ingin mengarahkan dan Anda tidak memerlukan fungsionalitas tingkat lanjut, sepertinya menggunakan
Redirect
sudah cukup bagi Anda. Anda akan menempatkan diRedirect
bawah arahan VirtualHost.Solusi sisi klien adalah menggunakan
meta refresh
tag.sumber
www.example.com
keexample.com
menggunakan metode ini?ServerName
danServerAlias
. Yang satu memiliki example.com dan yang lainnya www.example.com. Kemudian, kedua entri dns akan mengakses dokumen yang ditentukan dalam vhost yang sama.baik, Anda bisa membuat satu host virtual untuk SERVERNAME www.example.com dan minta dialihkan ke host virtual lain dengan servername example.com
sumber