400 错误请求将 HTTP 重写为 HTTPS 不起作用

400 错误请求将 HTTP 重写为 HTTPS 不起作用

我在 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 中的设置,导致了这个问题。

相关内容