Назад | Перейти на главную страницу

Перенаправление веб-сайтов периодически работает в Firefox, но не работает в IE

После того, как несколько попыток обнаружили ошибку при перенаправлении веб-сайтов, мне удалось выполнить перенаправление веб-сайтов, но оно периодически работает в Firefox, но не работает вообще в IE. Мне удалось очистить весь кеш и повторить попытку в Firefox, и он работает, но, как ни странно, после этого не работает. Я подтвердил, что в то время я не вносил никаких изменений ни в какие файлы. Кто-нибудь знал или сталкивался с этим раньше? Я был оооочень счастлив, что мой веб-сайт, наконец, перенаправляет, даже если я был счастлив, примерно через 2 минуты, потом оказалось, что перенаправления не было снова. : ((Мне просто нужно перенаправить, когда я набираю http://example.com это перенаправить на https://www.example.com Ниже мое перенаправление в файле .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]

Ниже мои логи:

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]

Я также обнаружил, что мой веб-сайт перенаправляет только когда я выхожу из VPN (мне нужен VPN, чтобы я мог подключиться к серверу, чтобы исправить или получить информацию, которую я сделал для перенаправления)

Ниже представлен элемент, который я добавил в файл .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]

Ниже мой httpd-vhosts.conf:

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

Мой сертификат SSL был настроен в httpd-ssl.conf, поэтому я указываю свой httpd-vhosts.conf как VirtualHost *: 80 Ниже мой httpd-vhosts.conf:

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

Обновить

Вот что я обновляю в .htaccess, добавляя [OR]:

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

И ниже журналы, которые я получил:

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]

Я попробовал еще раз в браузере, но он не был перенаправлен. Я также пытаюсь отлаживать в firefox, и у меня есть хост example.com

Это то, что я получил, удалив [ИЛИ]

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

Журналы:

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

Пожалуйста, скажите мне, что мое перенаправление работает, потому что я работал над этим в течение нескольких месяцев и сейчас теряю идею (надеюсь, не из-за моей глупой ошибки ... молюсь!). Пожалуйста, помогите мне и заранее спасибо!

Я считаю, что вам на самом деле не нужно это условие:

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

Потому что это вызовет бесконечный цикл перенаправления к самому себе, если это из .htaccess это относится к https://www версия тоже:

RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

Я считаю, что это недостающий космический символ. Пожалуйста, измените это:

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

к этому:

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

Записи вашего файла журнала доказали, что http://www.example.com был успешно переписан на https://www.example.com/. Они ничего не доказали о http://example.com. Добавление пробела должно исправить последнее.

Вместо того mod_rewrite вы должны использовать что-то вроде этого в определении Virtualhost:

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

В соответствии с Документация Apache httpd.

mod_rewrite следует рассматривать в крайнем случае, когда не хватает других альтернатив. Использование его, когда есть более простые альтернативы, приводит к запутанным, хрупким и сложным в обслуживании конфигурациям.