我最近在我的apache服务器上设置了SSL(服务器托管在DigitalOcean上)。我已经按照说明设置证书并编辑到服务器配置文件以将http重定向到https。一切工作文件,但我有一个问题,当使用一个包含文件的http url。在这种情况下,文件被附加到没有/的域名,所以浏览器显示一个文件未找到消息(这是正确的)。
http://www.my-website.com正确重定向到https://www.my-website.com
然而,
http://www.my-website.com/file1.html重定向到https://www.my-website.comfile1.html(服务器名后面缺少/)
谁能告诉我是什么问题?apache .conf文件中的重定向命令如下:<VirtualHost *:80>
ServerName my-website.com
Redirect permanent / https://www.my-website.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
</VirtualHost>
感谢按照Don't Panic评论中建议的链接,我尝试了原始Apache文档http://httpd.apache.org/docs/current/rewrite/avoid.html#redirect中的解决方案,并且它有效。我不确定问题是否在重定向语句中缺乏引号(我以前尝试过完全相同的事情没有引号,它没有工作)。对我有效的解决方案如下:
<VirtualHost *:80>
ServerName www.example.com
Redirect "/" "https://www.example.com/"
</VirtualHost>
Apache文档中Redirect指令的语法是:
Redirect [status] [URL-path] URL
这种情况下的问题是,重定向将URL-path参数之后的任何剩余路径附加到URL。
因此在"http://www.my-website.com/file1.html"中,其余部分是"file1.html",它将直接追加到给定的URL,产生"https://www.my-website.comfile1.html"
解决方案是在URL的末尾添加一个斜杠,将该行改为:
Redirect permanent "/" "https://www.my-website.com/"
(将两个参数都放在引号中也有帮助,但不是问题的原因)。
另外,请注意,如果URL-path参数不是"/",则URL上不需要末尾的斜杠,实际上URL-path和URL需要匹配。例如:Redirect permanent "/one" "https://www.my-website.com/two"