Pengalihan situs web sesekali berfungsi di Firefox, tetapi tidak berfungsi sama sekali di IE [duplikat]

Apr 04 2020

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

3 EsaJokinen Apr 04 2020 at 16:56

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]
2 liverwust Apr 04 2020 at 16:49

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.

1 dexter Apr 04 2020 at 18:10

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.