Chuyển hướng trang web hoạt động không liên tục trong Firefox nhưng hoàn toàn không hoạt động trong IE [bản sao]

Apr 04 2020

Sau một vài lần thử lỗi trong chuyển hướng trang web, tôi quản lý để thực hiện chuyển hướng trang web nhưng nó hoạt động không liên tục trong Firefox nhưng hoàn toàn không hoạt động trong IE. Tôi quản lý để xóa tất cả bộ nhớ cache và thử lại trong Firefox và nó hoạt động, nhưng kỳ lạ là nó không hoạt động sau đó. Tôi xác nhận rằng tôi không thực hiện bất kỳ thay đổi nào trên bất kỳ tệp nào tại thời điểm đó. Có ai có bất kỳ ý tưởng hoặc đối mặt với điều này trước đây? Tôi rất vui vì trang web của tôi cuối cùng cũng chuyển hướng ngay cả khi tôi rất vui như 2 phút sau đó nó không chuyển hướng nữa. : ((Tôi chỉ cần nó chuyển hướng khi tôi nhập http://example.com nó chuyển hướng đến https://www.example.com Dưới đây là chuyển hướng của tôi trong tệp .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]

Dưới đây là nhật ký của tôi:

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]

Tôi cũng nhận thấy rằng trang web của mình chỉ chuyển hướng khi tôi đăng xuất khỏi VPN (tôi cần VPN để có thể kết nối với máy chủ để sửa hoặc lấy thông tin mà tôi đã thực hiện để chuyển hướng)

Dưới đây là mục mà tôi đã thêm vào tệp .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]

Dưới đây là httpd-vhosts.conf của tôi:

<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>

Chứng chỉ SSL của tôi đã được định cấu hình trong httpd-ssl.conf vì vậy tôi trỏ httpd-vhosts.conf của mình là VirtualHost *: 80 Dưới đây là httpd-vhosts.conf của tôi:

<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>

Cập nhật

Dưới đây là những gì tôi cập nhật trong .htaccess bằng cách thêm [HOẶC]:

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

Và dưới đây là nhật ký mà tôi nhận được:

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]

Tôi đã thử lại trong trình duyệt nhưng nó không được chuyển hướng. Tôi cũng cố gắng gỡ lỗi trong firefox và máy chủ lưu trữ tôi nhận được là example.com

Đây là những gì tôi nhận được khi xóa [HOẶC]

RewriteCond %{HTTPS} !on 
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

Nhật ký:

RewriteCond: input='off' pattern='!on' => matched
RewriteCond: input='www.example.com' pattern='^example\\.com$' => not-matched

Vui lòng cho tôi biết rằng sự chuyển hướng của tôi đang hoạt động vì tôi đã làm việc này trong nhiều tháng và giờ đã hết ý tưởng (tôi hy vọng không phải vì sai lầm ngớ ngẩn của tôi ... cầu nguyện!). Xin hãy giúp tôi và cảm ơn trước!

Trả lời

3 EsaJokinen Apr 04 2020 at 16:56

Tôi tin rằng bạn không thực sự muốn điều kiện này:

RewriteCond %{HTTP_HOST} ^www\.example\.com$

Bởi vì điều đó sẽ gây ra một vòng lặp chuyển hướng vô hạn cho chính nó, vì đây cũng là từ .htaccessáp dụng cho https://wwwphiên bản:

RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
2 liverwust Apr 04 2020 at 16:49

Tôi tin rằng đó là một ký tự không gian bị thiếu. Vui lòng thay đổi điều này:

RewriteCond %{HTTP_HOST} ^example\.com$[OR]

đến điều này:

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]

Các mục nhập logfile của bạn đã chứng minh rằng http://www.example.com đã được ghi lại thành công thành https://www.example.com/ . Họ không chứng minh bất cứ điều gì về http://example.com . Thêm ký tự khoảng trắng sẽ sửa lỗi sau.

1 dexter Apr 04 2020 at 18:10

Thay vì mod_rewritebạn nên sử dụng một cái gì đó như thế này trong định nghĩa Virtualhost:

ServerName  www.example.com
ServerAlias example.com
Redirect permanent / https://www.example.com/

Theo tài liệu httpd Apache .

mod_rewrite nên được coi là phương sách cuối cùng, khi các lựa chọn thay thế khác được tìm thấy. Sử dụng nó khi có các lựa chọn thay thế đơn giản hơn dẫn đến các cấu hình khó hiểu, dễ hỏng và khó bảo trì.