Я использую apache 2.4.25 на сервере Debian. Есть веб-сайт, доступный через:
example.de and
www.example.de
, они должны быть переписаны через конфиги и .htaccess в:
https://example.de
https://www.example.de
Это не работает.
Эти строки были добавлены с помощью let-encrypt в sites-enabled / 000-default.conf , закомментированные строки были добавлены мной для перезаписи example.de в www.example.de, но он не работает:
RewriteEngine on
# rewrite example.de to www.example.de changed 11.11.2019
#RewriteCond %{HTTP_HOST} ^example\.de$ [NC]
#RewriteRule (.*) https://www.example.de/$1 [R=301,L]
#RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301]
RewriteCond %{SERVER_NAME} =www.example.de
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
SSL-config записан в 000-default-le-ssl.conf:
<IfModule mod_ssl.c>
<VirtualHost *:443>
...
<Directory /var/www/>
Options -Indexes +FollowSymLinks
AllowOverride all
Order allow,deny
allow from all
</Directory>
# added 01.04.2019 END
<Directory /var/www/html/>
Options -Indexes +FollowSymlinks
AllowOverride All
Require all granted
allow from all
</Directory>
...
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
Header always set Content-Security-Policy upgrade-insecure-requests
SSLCertificateFile /etc/letsencrypt/live/www.example.de/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.de/privkey.pem
Также есть wordpress.conf с записями виртуального хоста для порта 80 и 443, буквально содержащий части default и default-ssl.conf.
В .htaccess написано следующее:
# BEGIN WordPress
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# rewrite example.de to www.example.de changed 11.11.2019
#RewriteCond %{HTTP_HOST} !^www\.
#RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301]
#RewriteCond %{SERVER_PORT} !=443
#RewriteRule ^(.*)$ https://www.example.de/$1 [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}
RewriteRule îndex\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
</IfModule>
Я взглянул на rewrite- записи в журнале ошибок: правила перезаписи для перезаписи на www или https там не отображаются (перезапись отладки на уровне журнала: trace4).
Когда это был всего лишь тестовый сервер, переписывание с http на https работало как шарм, а теперь оно живое и это не так, при использовании https непосредственно в браузере работает (URL-адрес изменен на один символ и было добавлено условие перезаписи example.de на www.example.de). Я проверил модули; перезапустил сервер; servername = www.example.de, serveralias = example.de;
Я нашел это здесь, в stackoverflow, но ничего не работало или не применимо к моему случаю: https://stackoverflow.com/questions/17853828/redirecting-http-to-https-with-apache
Обслуживающий порт 443 через http создает ошибку 400 Bad Request вместо перенаправления.
Не могли бы вы помочь. Я не могу решить эту проблему. Заранее спасибо.