gpt4 book ai didi

apache - tld 中断来自外部链接的 ssl 重定向后缺少尾部斜线

转载 作者:太空宇宙 更新时间:2023-11-03 12:53:51 24 4
gpt4 key购买 nike

我已经将我的网站更改为 ssl。它工作正常,网站内部的所有链接都可以工作,但指向 http 版本的外部链接已损坏,因为域名末尾的尾部斜杠丢失,例如

astarmathsandphysics dot com/a-level-physics-notes/thermal-physics-and-gases/a-level-physics-notes-prevosts-theory-of-heat-exchange.html

在 .com 重定向后缺少斜线

我需要强制尾部斜杠。在 apache2 配置文件中,我已重定向到带有尾部斜杠的 ssl 版本,并将此代码插入到我的 .htaccess 文件中

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^.*$ https://%1/$1/ [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

同时从非 ssl www 重定向到 ssl 非 www 在 .com 之后插入一个额外的斜杠

最佳答案

如果我没理解错的话,你想做三件事:

  • 如果 URL 不是目录,则删除结尾的斜杠
  • 将 www 网址重定向到非 www
  • 将 http URL 重定向到 https

至少,这就是您的 .htaccess 告诉我的。现在开始讨论问题。


对于第一条规则,(.*) 匹配整个请求 URI 减去尾部斜杠(如果存在)。这意味着您只需要在第二部分使用 $1,而不需要 /$1,后者会产生双斜线。这将被重写为:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]

现在是第二条规则。您在这里基本上遇到了相同的双斜杠问题,因为 $1 捕获了完整的请求 URI,包括开始的斜杠。重写它看起来像:

RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1$1 [R=301,L]

由于该规则只是复制整个请求 URI,因此以下规则是等效的:

RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^ https://%1%(REQUEST_URI} [R=301,L]

最后的规则很好,但如果你希望它是永久的,你应该使用 R=301 而不是隐式的 302 重定向。此外,作为最佳做法,您不应省略 ^$。重写为:

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

进一步注意,您只需要在文件中使用RewriteEngine on 一次。


所以总的来说,规则应该是这样的:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^ https://%1%(REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

关于apache - tld 中断来自外部链接的 ssl 重定向后缺少尾部斜线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38447166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com