我在 Debian 服务器上运行 apache 2.4.25。有一个网站可以通过:
example.de and
www.example.de
它们应该通过 configs 和 .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 的虚拟主机条目,字面上包含 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>
我查看了错误日志中的重写条目:重写到 www 或 https 的重写规则不出现在那里(loglevel debug rewrite: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
通过 http 服务端口 443 会创建 400 Bad Request Error 而不是重定向
有人可以帮忙吗?我没有解决它。提前致谢。
问题解决了,我的一位同事更改了 SNI 中的设置,导致了问题。