Pengalihan situs web sesekali berfungsi di Firefox, tetapi tidak berfungsi sama sekali di IE [duplikat]
Setelah mencoba beberapa kesalahan dalam pengalihan situs web, saya berhasil melakukan pengalihan situs web tetapi kadang-kadang berfungsi di Firefox tetapi tidak berfungsi sama sekali di IE. Saya berhasil menghapus semua cache dan mencoba lagi di Firefox dan berhasil, tetapi anehnya itu tidak berfungsi setelah itu. Saya mengonfirmasi bahwa saya tidak melakukan perubahan apa pun pada file mana pun pada saat itu. Apakah ada yang tahu atau menghadapi ini sebelumnya? Saya sangaaaat senang akhirnya website saya redirect bahkan saya senang seperti 2 menit kemudian ternyata tidak redirect lagi. : ((Saya hanya membutuhkannya untuk mengalihkan ketika saya mengetik http://example.com itu dialihkan ke https://www.example.com Di bawah ini adalah pengalihan saya di file .htaccess:
RewriteEngine On
#Options +FollowSymLinks
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^example\.com$[OR] RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
Di bawah ini adalah log saya:
init rewrite engine with requested uri /
pass through /
[perdir D:/wamp64/www/example/] strip per-dir prefix: D:/wamp64/www/example/ ->
[perdir D:/wamp64/www/example/] applying pattern '.*' to uri ''
[perdir D:/wamp64/www/example/] RewriteCond: input='off' pattern='!on' => matched
[perdir D:/wamp64/www/example/] RewriteCond: input='www.example.com' pattern='^www\\.example\\.com$' => matched
[perdir D:/wamp64/www/example/] rewrite '' -> 'https://www.example.com/'
[perdir D:/wamp64/www/example/] explicitly forcing redirect with https://www.example.com/
[perdir D:/wamp64/www/example/] escaping https://www.example.com/ for redirect
[perdir D:/wamp64/www/example/] redirect to https://www.example.com/ [REDIRECT/301]
Saya juga menemukan bahwa situs web saya hanya mengalihkan ketika saya keluar dari VPN (saya perlu VPN agar saya dapat terhubung ke server untuk memperbaiki atau mendapatkan info yang telah saya lakukan untuk pengalihan)
Di bawah ini adalah item yang saya tambahkan di file .htaccess:
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteCond %{HTTP_HOST] ^www\.example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
Di bawah ini adalah httpd-vhosts.conf saya:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot "d:/wamp64/www/example"
<Directory "d:/wamp64/www/example/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Order allow,deny
Allow from all
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
</Directory>
</VirtualHost>
Sertifikat SSL saya dikonfigurasi di httpd-ssl.conf jadi saya arahkan httpd-vhosts.conf saya sebagai VirtualHost *: 80 Di bawah ini adalah httpd-vhosts.conf saya:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot "d:/wamp64/www/example"
<Directory "d:/wamp64/www/example/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Order allow,deny
Allow from all
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
</Directory>
</VirtualHost>
Memperbarui
Berikut ini yang saya perbarui di .htaccess dengan menambahkan [OR]:
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
Dan di bawah ini adalah log yang saya dapatkan:
strip per-dir prefix: D:/wamp64/www/example/ ->
applying pattern '.*' to uri ''
RewriteCond: input='off' pattern='!on' => matched
rewrite '' -> 'https://www.example.com/'
explicitly forcing redirect with https://www.example.com/
escaping https://www.example.com/ for redirect
redirect to https://www.example.com/ [REDIRECT/301]
Saya telah mencobanya lagi di browser tetapi tidak diarahkan. Saya juga mencoba men-debug di firefox dan host yang saya dapatkan adalah example.com
Ini yang saya dapatkan dengan menghapus [OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
Log:
RewriteCond: input='off' pattern='!on' => matched
RewriteCond: input='www.example.com' pattern='^example\\.com$' => not-matched
Tolong beri tahu saya bahwa pengalihan saya berfungsi karena saya telah bekerja dalam hal ini selama berbulan-bulan dan kehilangan ide sekarang (saya harap ini bukan karena kesalahan konyol saya ... berdoa!). Tolong bantu saya dan terima kasih sebelumnya!
Jawaban
Saya yakin Anda sebenarnya tidak menginginkan kondisi ini:
RewriteCond %{HTTP_HOST} ^www\.example\.com$
Karena itu akan menyebabkan pengulangan pengalihan tak terbatas ke dirinya sendiri, mengingat ini dari .htaccessyang juga berlaku untuk https://wwwversi:
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
Saya percaya itu adalah karakter luar angkasa yang hilang. Harap ubah ini:
RewriteCond %{HTTP_HOST} ^example\.com$[OR]
untuk ini:
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
Entri logfile Anda membuktikan bahwa http://www.example.com berhasil ditulis ulang menjadi https://www.example.com/ . Mereka tidak membuktikan apa pun tentang http://example.com . Menambahkan karakter spasi harus memperbaiki yang terakhir.
Daripada mod_rewriteAnda harus menggunakan sesuatu seperti ini dalam definisi Virtualhost:
ServerName www.example.com
ServerAlias example.com
Redirect permanent / https://www.example.com/
Menurut dokumentasi Apache httpd .
mod_rewrite harus dianggap sebagai pilihan terakhir, ketika alternatif lain ditemukan kurang. Menggunakannya ketika ada alternatif yang lebih sederhana akan mengarah pada konfigurasi yang membingungkan, rapuh, dan sulit untuk dipelihara.