#apache #redirect #mod-rewrite
#apache #перенаправление #mod-переписать
Вопрос:
Я уже пробовал разные решения из других потоков, но почему-то ни одно из них не работает. Итак, у меня есть домен, my-domain.com
и я хочу, чтобы все http-запросы http://my-domain.com
направлялись или http:///*.my-domain.com
перенаправлялись на соответствующую страницу https. В папке /etc/apache2/sites-enabled/
у меня есть файл конфигурации, который выглядит следующим образом:
<VirtualHost *:80>
ServerName my-domain.com
ServerAlias *.my-domain.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(. ).my-domain.com$
RewriteRule ^(.*)$ https://%1.my-domain.com/$1 [R=302,L]
</VirtualHost>
Но все равно перенаправлений нет. Все запросы завершаются ошибкой из-за тайм-аута. Есть ли что-то, чего мне не хватает?
Ответ №1:
В вашем RewriteRule
случае %1
он не выполняет то, что, по вашему мнению, он будет делать.
# bad
RewriteRule ^(.*)$ https://%1.my-domain.com/$1 [R=302,L]
Попробуйте это:
# good
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Что мы здесь делаем, так это принимаем ЛЮБОЙ запрос, который НЕ является HTTPS, и переписываем его. Мы не заботимся о том, чтобы смотреть на %{HTTP_HOST}
, ни %{REQUEST_URI}
, потому что мы просто будем использовать их вслепую.
Это «слепая пересылка» на HTTPS. Мне все равно, что вы просили, но поскольку вы сделали это через HTTP, вам придется делать это через HTTPS.
На этом этапе дальнейшее перенаправление становится другим правилом.
Кроме того, 302
это временное перенаправление. Возможно, вы захотите рассмотреть 301
, для постоянного перенаправления между портами.
Комментарии:
1. Спасибо за ваш ответ. Но все равно это не работает. У меня такое ощущение, что ему не нужно ничего делать с конфигурацией apache. Я также не вижу никаких журналов доступа для http-запросов. Все https-запросы работают нормально. Есть ли какой-либо файл журнала, кроме журналов доступа apache, где я могу видеть входящие http-запросы?
2. Что ж, как только вы решите эту проблему, по крайней мере, у вас не будет этой проблемы, стоящей на вашем пути. Возможно, вы захотите задать другой вопрос с другими деталями, чтобы отладить другую проблему.
3. Используется
RewriteLog
для отправки перезаписи отладки в файл. cwiki.apache.org/confluence/display/HTTPD/RewriteLog