我在 Debian-Server 上运行 apache 2.4.25。可以通过以下方式访问网站:
example.de and
www.example.de
它们应该通过配置和 .htaccess 重写为:
https://example.de
https://www.example.de
那是行不通的。
此行由 lets-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 的虚拟主机条目,其字面上包含默认和默认 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>
我查看了错误日志中的重写条目:重写为 www 或 https 的重写规则没有出现在那里(日志级别调试重写:trace4)。
当它只是一个测试服务器时,从 http 到 https 的重写工作正常,现在它上线了,但不起作用,而在浏览器中直接使用 https 则有效(url 更改了一个字符,并添加了将 example.de 重写为 www.example.de 的条件)。我检查了模块;重新启动了服务器;服务器名称 = www.example.de,服务器别名 = example.de;
我在 stackoverflow 上找到了这个,但没有任何效果或不适用于我的情况: https://stackoverflow.com/questions/17853828/redirecting-http-to-https-with-apache
通过 http 为 443 端口提供服务会产生 400 Bad Request Error,而不是重定向
有人能帮忙吗?我没有解决。提前谢谢。
答案1
问题解决了,我的一个同事更改了 SNI 中的设置,导致了这个问题。