Bagaimana saya bisa memastikan bahwa url saya selalu dimulai dengan www?

17

Saya ingin memastikan bahwa pengguna datang www.mydomain.comwalaupun mereka datang melalui alias mydomain.com. Ini agar saya memiliki kendali atas cookie pada subdomain, dan agar Google melihat satu domain tunggal dan bukan hodge-podge URL.

Bagaimana saya bisa melakukan ini dengan apache?

Magnar
sumber
5
Bisakah saya menyarankan Anda sebaliknya membalikkan ini, dan menegakkan mydomain.com? Awalan 'www' berlebihan dan sama sekali tidak perlu.
Eevee
Cookie dikirim ke semua subdomain di mydomain.com, sementara saya dapat memutuskan sendiri cookie apa yang diambil dari mana dengan www.mydomain.com .. Misalnya, saya dapat menghindari menambahkan cookie ke static.mydomain.com, sehingga cookie tidak dapat dikirim untuk setiap gambar yang dimuat. Ini jelas tidak perlu.
Magnar
Anda dapat secara khusus memberi tahu Google untuk menggunakan gaya tautan tunggal. Lihat jawaban saya di bawah ini.
Robinicks
Saya tidak memiliki perwakilan, tetapi menambahkan tag ini akan membantu: redirect redirectmatch mod_alias
Tom
1
Meskipun ini jauh di kemudian hari, ini masih relevan. www tidak ditinggalkan, karena domain tanpa subdomain memiliki beberapa kelemahan. Lihat yes-www.org/why-use-www untuk beberapa alasan untuk menggunakan www.
user50849

Jawaban:

17
<VirtualHost ip:80>
   ServerName domain.com
   RedirectMatch permanent ^(.*)$ http://www.domain.com$1
</VirtualHost>

<VirtualHost ip:80>
   ServerName www.domain.com

   ... usual config
</VirtualHost>
Dave Cheney
sumber
7
Untuk solusi yang sedikit lebih sederhana, Anda dapat: "Redirect permanen / ptth: //www.domain.com/" dan apache akan secara otomatis mempertahankan sufiks. (Saya membalikkan http untuk menonaktifkan autolink.)
Greg Hewgill
1
Betulkah ? Manis, aku tidak pernah tahu itu. Saya selalu berpikir Anda harus menggunakan RedirectMatch untuk melestarikan bagian trailing URI
Dave Cheney
4

Tambahkan ini ke httpd.conffile Anda :

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]
Magnar
sumber
4

Aktifkan dukungan mod_rewrite kemudian buat file .htaccess di folder root untuk domain Anda dengan konten berikut:

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteBase /
   RewriteCond %{HTTP_HOST} ^domain\.com$
   RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
</IfModule>
Richard Slater
sumber
jangan lupa untuk membuat tes RewriteCond tidak peka terhadap kasus ...
Alnitak
Hanya lakukan ini jika Anda tidak memiliki akses untuk membuat perubahan pada file konfigurasi apache karena suatu alasan. .htaccessfile memiliki banyak overhead, dan penulisan ulang di dalamnya membuatnya jauh lebih buruk.
John Dalton
menggunakan Redirect selalu lebih baik daripada menggunakan mod_rewrite untuk tugas ini.
David Pashley
3

Jika Anda benar-benar ingin Google menggunakan gaya domain tertentu (dengan atau tanpa www ) maka buat akun Google Webmaster Tools gratis , verifikasi kepemilikan domain Anda (unggah file) dan tetapkan domain pilihan Anda menggunakan panel kontrol online.

Sesederhana itu, dan Anda tidak perlu mengubah kode sisi server apa pun, juga tautan masuk dengan atau tanpa www akan diperlakukan sama dengan meningkatkan PageRank halaman Anda.

Tautan dapat mengarah ke situs Anda menggunakan versi URL www dan non-www (misalnya, http://www.example.com dan http://example.com ). Domain yang disukai adalah versi yang ingin Anda gunakan untuk situs Anda dalam hasil pencarian .

Setelah Anda memberi tahu kami nama domain pilihan Anda, kami akan mempertimbangkan preferensi Anda saat menampilkan URL. Mungkin perlu waktu sebelum Anda melihat perubahan ini sepenuhnya tercermin dalam indeks kami.

Jika Anda tidak menentukan domain pilihan, kami dapat memperlakukan versi domain www dan non-www sebagai referensi terpisah untuk halaman terpisah.

Robinicks
sumber
1

Saya memiliki masalah sebaliknya, orang-orang pergi ke www.domain.com ketika saya hanya ingin melayani langsung dari domain.com:

<VirtualHost *:80>
   ServerName domain.com

   ... usual config
</VirtualHost>

<VirtualHost *:80>
   ServerName www.domain.com
   ServerAlias sub.domain.com # can also catch some other subdomains
   ServerAlias *.domain.com # or all previously unmatched domains

   Redirect permanent / http://domain.com/
</VirtualHost>

Seperti yang disebutkan Greg Hewgill, menggunakan Redirect sedikit lebih sederhana daripada RedirectMatch dan melakukan pekerjaan yang sama, lihat http://httpd.apache.org/docs/2.0/mod/mod_alias.html# redirect untuk detail lebih lanjut.

Tom
sumber