После того, как несколько попыток обнаружили ошибку при перенаправлении веб-сайтов, мне удалось выполнить перенаправление веб-сайтов, но оно периодически работает в 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 следует рассматривать как последнее средство, когда другие альтернативы не найдены. Использование его, когда есть более простые альтернативы, приводит к запутанным, хрупким и сложным в обслуживании конфигурациям.