重定向http到https在apache不工作的http链接,包括一个文件名



我最近在我的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"

最新更新