我使用这些命令配置 ubuntu 服务器。
sudo a2enmod rewrite
sudo a2ensite 000-default.conf
我像这样编辑 000-default.conf。
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride all
Require all granted
</Directory>
sudo service apache2 restart
我使用 let encrypt 创建 ssl。如果我打开 myweb.com,它会重定向到https://myweb.com 。但如果我打开http://myweb.com 它显示 apache 页面未重定向到https://myweb.com 。看起来 .htaccess 没有运行。
这是.htaccess 代码。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
如何修复?
答案1
我发现一个关于 Apache 的奇怪问题.htaccess
。
我.htaccess
在公共html
目录中设置了一个文件,用于基本身份验证。我还设置了必要的 apache 配置,正如许多指导站点、页面等所指示的那样,所以我知道我的设置基本正确。
无论我如何配置 apache,我都不会收到身份验证提示。
由于我将密码存储在公共 html 目录的父目录中,因此我需要将该目录包含在 apache 定义中。
原始定义如下:
<Directory /srv/www/mysite/public_html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>`
然后我将配置代码更改为以下内容:
<Directory /srv/www/mysite>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>`
密码文件存储在 /srv/www/mysite/access/.htpasswd 中。根据第一个配置模式,此目录超出了配置范围。
通过备份目录(公共 html 的父目录),“access”目录现在处于范围内。现在 apache 会显示登录提示。
答案2
现在我找到了答案。
RewriteCond %{HTTPS} off
不工作,必须更换RewriteCond %{HTTPS} !on