Saya memiliki situs web yang tampaknya tidak mengalihkan dari non-www ke www.
Konfigurasi Apache saya adalah sebagai berikut:
RewriteEngine On
### re-direct to www
RewriteCond %{http_host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
Apa yang saya lewatkan?
apache
redirect
mod-rewrite
no-www
pengguna121196
sumber
sumber
.htaccess
solusi berbasis saya sarankan jawaban yang telah diajukan pada pertanyaan diametral: stackoverflow.com/a/5262044/367456Jawaban:
Menggunakan mesin penulisan ulang adalah cara yang cukup berat untuk menyelesaikan masalah ini. Berikut ini adalah solusi yang lebih sederhana:
Dan kemudian Anda akan memiliki
<VirtualHost>
bagian lain denganServerName www.example.com
untuk konfigurasi server nyata Anda. Apache secara otomatis menyimpan apa pun setelah/
menggunakanRedirect
direktif , yang merupakan kesalahpahaman umum tentang mengapa metode ini tidak bekerja (padahal sebenarnya itu berhasil).sumber
www.example
dan diexample
mana pun mereka muncul dalam sampel.Redirect 301 / http://example2.com/extra/
tetapi ketika dialihkan, ia melewatkan garis miring, yang berartiexample.com/blah
pergi keexample2.com/extrablah
. Ada ide? (Apache 2.2.22)http://example.com/subdir/?lold=13666
=>http://www.example.com/subdir/?lold=13666
sumber
example.com/subdi1/ws/*
melalui tanpa www?s
ke http di baris ketiga.sumber
www.
di dalamnyaServerAlias
?Untuk menghapus
www
dariURL
situs web Anda, gunakan kode ini dalam.htaccess
file Anda :Untuk memaksa
www
situs web Anda,URL
gunakan kode ini di.htaccess
Di mana
YourSite.com
harus diganti dengan AndaURL
.sumber
Inilah yang terjadi dengan kode di atas. Blok host virtual pertama memeriksa apakah permintaannya adalah www.example.com dan menjalankan situs web Anda di direktori itu.
Gagal yang mana, ia datang ke bagian virtual host kedua. Di sini selain dari www.example.com dialihkan ke www.example.com.
Urutan di sini penting. Jika Anda menambahkan direktif virtualhost kedua terlebih dahulu, itu akan menyebabkan pengalihan loop.
Solusi ini akan mengalihkan permintaan apa pun ke domain Anda, ke www.domainanda.com.
Bersulang!
sumber
Ini mirip dengan banyak saran lainnya dengan beberapa peningkatan:
%{REQUEST_URI}
aturan sebelumnya .Bagian path tidak terpengaruh oleh
RewriteRule
seperti sebelumnya%{REQUEST_URI}
adalah.sumber
Ini dimulai dengan
HTTP_HOST
variabel, yang hanya berisi bagian nama domain dari URL yang masuk (example.com
). Dengan asumsi nama domain tidak mengandungwww.
dan cocok dengan nama domain Anda dengan tepat, maka RewriteRule ikut berperan. Pola^(.*)$
akan cocok dengan semua yang ada diREQUEST_URI
, yang merupakan sumber daya yang diminta dalam permintaan HTTP (foo/blah/index.html
). Ini menyimpan ini dalam referensi kembali, yang kemudian digunakan untuk menulis ulang URL dengan nama domain baru (yang dimulai denganwww
).[NC]
menunjukkan pencocokan pola case-insensitive,[R=301]
menunjukkan redirect eksternal menggunakan kode 301 (sumber daya dipindahkan secara permanen), dan[L]
menghentikan semua penulisan ulang lebih lanjut, dan mengarahkan ulang segera.sumber
Kode pengalihan untuk non-www => www dan sebaliknya www => non-www. Tidak ada domain dan skema hardcoding dalam file .htaccess. Jadi domain asal dan versi http / https akan dipertahankan.
APACHE 2.4 DAN BARU
NON-WWW => WWW:
WWW => NON-WWW:
Catatan: tidak berfungsi di Apache 2.2 di mana% {REQUEST_SCHEME} tidak tersedia. Untuk kompatibilitas dengan Apache 2.2 gunakan kode di bawah ini atau ganti% {REQUEST_SCHEME} dengan http / https tetap.
APACHE 2.2 DAN BARU
NON-WWW => WWW:
... atau versi yang lebih pendek ...
WWW => NON-WWW:
... versi yang lebih pendek tidak dimungkinkan karena% N hanya tersedia dari RewriteCond terakhir ...
sumber
Saya menjalankan ini ...
Saya ingin ini menjadi universal untuk 25+ domain di server baru kami, jadi arahan ini ada di file virtual.conf saya dalam tag <Directory>. (dir adalah induk dari semua dokumen)
Saya harus melakukan sedikit hack pada aturan penulisan ulang, karena dokumen lengkap sedang dilakukan pada pertandingan pola, terlepas dari apa yang http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html kata tentang hal itu hanya menjadi barang setelah host dan port.
sumber
Jika Anda menggunakan Apache 2.4, tanpa perlu mengaktifkan modul apache menulis ulang, Anda dapat menggunakan sesuatu seperti ini:
sumber
Redirect domain.tld ke www.
Baris berikut dapat ditambahkan dalam arahan Apache atau dalam file .htaccess:
Jangan lupa untuk menerapkan perubahan apache jika Anda memodifikasi vhost.
(berdasarkan Drupal7 .htaccess default tetapi harus berfungsi dalam banyak kasus)
sumber
Ini sederhana!
sumber
Ini tidak hanya akan mengarahkan ulang nama domain tetapi juga halaman dalam.seperti ...
example.com/abcd.html ==> www.example.com/abcd.html
example.com/ab/cd.html?ef=gh ==> www.example.com/ab/cd.html?ef=gh
sumber
Coba ini:
sumber
Jangan selalu gunakan
Redirect permanent
(atau mengapa itu dapat menyebabkan masalah di masa depan)Jika ada kemungkinan Anda akan menambahkan subdomain nanti, jangan gunakan
redirect permanent
.Karena jika klien telah menggunakan subdomain yang tidak terdaftar karena
VirtualHost
ia mungkin juga tidak pernah mencapai subdomain ini bahkan ketika terdaftar kemudian.redirect permanent
mengirimkanHTTP 301 Moved Permanently
ke klien (browser) dan banyak dari mereka menyimpan tanggapan ini selamanya (sampai cache dihapus [secara manual]). Jadi menggunakan subdomain itu akan selalu di-autoredirect ke www. *** tanpa meminta server lagi.lihat Berapa lama cache browser HTTP 301s?
Jadi gunakan saja
Redirect
Apache.org - Kapan tidak menggunakan mod_rewrite
Apache.org - Nama Host Canonical
sumber
RewriteEngine On RewriteCond %{HTTP_HOST} ^yourdomain.com [NC] RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]
periksa karya sempurna ini
sumber
-Jika Anda meng-host beberapa nama domain (Opsional)
-Jika semua nama domain menggunakan https (sebagaimana mestinya)
-Jika Anda ingin semua nama domain menggunakan www dot domainName
Ini akan menghindari pengalihan doble (http: // non www ke http: // www dan kemudian ke https: // www)
Dan
Anda harus mengubah kode redirection 301 ke yang paling nyaman
sumber
Saya hanya punya masalah yang sama. Tetapi dipecahkan dengan ini
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Aturan ini mengarahkan non-www ke www.
Dan aturan ini untuk mengarahkan ulang www ke non-www
RewriteEngine On RewriteCond %{HTTP_HOST} !^my-domain\.com$ [NC] RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]
Rujuk dari http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/
sumber
Ini bekerja untuk saya:
Saya menggunakan pola lihat-depan
(?!www.domain.com)
untuk mengecualikanwww
subdomain ketika mengarahkan semua domain kewww
subdomain untuk menghindari loop redirect tak terbatas di Apache.sumber
Kode yang saya gunakan adalah:
sumber
Jika menggunakan solusi di atas dari dua
<VirtualHost *:80>
blok denganServerName
...... maka Anda harus mengatur
NameVirtualHost On
juga .Jika Anda tidak melakukan ini, Apache tidak membiarkan dirinya menggunakan
ServerName
s yang berbeda untuk membedakan blok, sehingga Anda mendapatkan pesan kesalahan ini:... dan tidak ada redirection yang terjadi, atau Anda memiliki loop redirection tak terbatas, tergantung pada blok mana yang Anda tempatkan terlebih dahulu.
sumber
Saya punya tugas serupa pada WP Multisite, di mana aturan redirection harus generik (untuk domain tertentu yang saya tambahkan ke jaringan). Saya memecahkan terlebih dahulu menambahkan wildcard ke domain (domain parkir). Perhatikan. setelah .com.
Dan kemudian saya menambahkan baris-baris berikut ke file .htaccess di root multisite saya. Saya kira itu akan berhasil untuk situs mana pun.
Semoga ini bisa membantu.
ps. Jika Anda ingin mengalihkan dari bukan www ke www, ubah baris terakhir menjadi
sumber
Saya merasa lebih mudah (dan lebih bermanfaat) untuk menggunakan ServerAlias saat menggunakan beberapa vhosts.
Ini juga berfungsi dengan https vhosts.
sumber