当我输入我的网站 zeugmarket.com 时,它显示为 https://zeugmarket.com//
我编写了这个 htaccess 文件以从 HTTP 转移到 https,但它还在末尾添加了两个斜杠。 我该如何阻止它:
RewriteEngine On
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://www.zeugmarket.com%{REQUEST_URI} [L,R=301]
Header always set Content-Security-Policy "upgrade-insecure-requests;"
最佳答案
RewriteCond %{ENV:HTTPS} !on RewriteRule ^(.*)$ https://www.zeugmarket.com%{REQUEST_URI} [L,R=301]
似乎有“其他东西”添加了额外的斜杠 - 由于这些指令,它没有发生。
at the end of my website URL like this:
//
双斜杠实际上位于 URL 路径的开头,而不严格位于结尾。例如。如果您请求http://example.com/foo
,那么它会返回https://example.com//foo
。
但是,这个重定向响应实际上来自 Nginx 服务器,而不是 Apache。 Nginx 可能被用作前端(反向)代理 - 因此需要在中使用 ENV:HTTPS
(环境变量)而不是 HTTPS
(服务器变量) RewriteCond
指令。
我会查找 Nginx 代理的配置问题,因为很可能是这个添加了额外的斜杠。
RewriteRule ^(.*)$ https://www.zeugmarket.com%{$1} [L,R=301]
顺便说一句,在此示例中(来自您的评论)%{$1}
并不严格有效,并且始终会导致空字符串 - 因此双斜杠绝对不是来自 Apache。
但是,您似乎有一个单页网站。您的任何 URL 上都没有任何 URL 路径?只有一个可见的 URL,即 https://www.example.com/
,因此可以简化您的指令:
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^ https://www.example.com/ [L,R=301]
请注意,主机名后面应该有一个斜杠(位于 URL 路径的开头)。如果您省略它,那么(通常)浏览器将在重定向的请求中附加斜杠。 (但看起来 Nginx 实际上是在重定向响应中附加这些斜杠 - 在到达浏览器之前。)
有关浏览器和主机名后的尾部斜杠的更多信息,请参阅网站管理员堆栈上的以下问题:
关于.htaccess - 为什么我的网站 URL 末尾有双斜杠,例如 ://,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64604068/