如何使用 apache2 设置自动重定向。我已经让 SSL 工作,并希望将所有内容重定向到 SSL 端。我添加了重定向 /https://fraffel.tech/但会将我带到错误的站点目录,而 https 会将我带到正确的位置。这是重定向的正确添加内容吗?(它在 VirtualHost *:80 中)
当前 VirtualHost 文件:
ServerName fraffel.tech
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/fraffeltech
Redirect / https://fraffel.tech/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/fraffeltech
SSLEngine on
SSLCertificateFile /etc/ssl/fraffel_tech.crt
SSLCertificateKeyFile /etc/ssl/private/fraffel.tech.key
SSLCertificateChainFile /etc/ssl/fraffel_tech.ca-bundle
</VirtualHost>
答案1
这里的问题是标签ServerName
中缺少指令<VirtualHost>
。这对于识别虚拟主机是必需的。
此外,对于这种情况,最好使用Redirect
带有选项的指令permanent
- 阅读“重定向方法”部分本文。
ServerName example.com # This directive provides a global server name.
# But you should set ServerName also for each virtual host
# to identify it!!!
<VirtualHost *:80>
ServerName example.com
# Redirect Requests to HTTPS with HTTP 301 status
Redirect permanent "/" "https://example.com/"
# Other configuration directives...
</VirtualHost>
<VirtualHost _default_:443>
ServerName example.com
# Other configuration directives...
</VirtualHost>
应用配置更改并重新启动(或重新加载)Apache。然后刷新浏览器的缓存或使用隐身窗口(或其他浏览器)查看更改。
对于此任务,您还可以使用重写规则,如下图所示这个问题,但在 Apache 文档中,你将被告知当您可以使用更简单的指令时,不要使用重写引擎。