【问题标题】:Why do I have double slashes at the end of my website URL like this: //为什么我的网站网址末尾有双斜杠,如下所示://
【发布时间】:2021-02-12 15:52:35
【问题描述】:

当我输入我的网站 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;"

【问题讨论】:

  • 我尝试了这些规则,但无法重现此问题。
  • %{REQUEST_URI} 替换为$1 会发生什么?
  • 在匿名浏览器窗口中测试。
  • 我尝试使用隐身浏览器,它给了我相同的结果,最后有两个斜线。
  • 用 Microsoft edge 试过,最后还是给我 //。

标签: .htaccess url https url-rewriting


【解决方案1】:

只需更改重写规则

代替

RewriteRule ^(.*)$ https://www.zeugmarket.com%{REQUEST_URI} [L,R=301]

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

最后你会得到一个斜线。

【讨论】:

    【解决方案2】:
    RewriteCond %{ENV:HTTPS} !on
    RewriteRule ^(.*)$ https://www.zeugmarket.com%{REQUEST_URI} [L,R=301]
    

    似乎有“其他东西”正在添加额外的斜线 - 由于这些指令,它没有发生。

    在我的网站 URL 的末尾是这样的://

    双斜杠实际上位于 URL 路径的 开始,而不是严格地在末尾。例如。如果你请求http://example.com/foo,那么它会返回https://example.com//foo

    然而,这个重定向响应实际上来自 Nginx 服务器,而不是 Apache。 Nginx 可能被用作前端(反向)代理 - 因此需要在 RewriteCond 指令中使用 ENV:HTTPS(环境变量)而不是 HTTPS(服务器变量)。

    我会寻找 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 路径的开头)。如果您省略它,那么(通常)浏览器 将在重定向的request 中附加斜杠。 (但似乎 Nginx 实际上是在重定向 response 中附加这些斜杠 - 在它到达浏览器之前。)

    有关浏览器和主机名后面的斜杠的更多信息,请参阅网站管理员堆栈上的以下问题:

    https://webmasters.stackexchange.com/questions/35643/is-trailing-slash-automagically-added-on-click-of-home-page-url-in-browser

    【讨论】:

    • 这是我的主人所说的:您好,我们确实使用 nginx 作为反向代理,但是 apache 处理 .htaccess 文件并进行所有 mod 重写,因此 nginx 与 apache 的处理方式实际上无关.htaccess 文件。
    • "所以 nginx 确实与 apache 处理 .htaccess 文件的方式无关。" - 除了来自 Apache 的请求在被提供给客户端之前必须通过 Nginx 代理服务器返回。您是否尝试过上面最后一个简单地重定向到https://www.example.com/(您的域)的示例?实际上,如果您尝试完全删除此重定向会发生什么?关键是,当它离开 Apache 时没有双斜杠(来自上面发布的示例) - 那么额外的斜杠来自哪里? (Nginx 似乎是唯一的障碍?)
    • 请注意,301 重定向会被浏览器永久缓存,因此您需要确保在测试之前清除所有缓存。最好使用 302(临时)重定向进行测试以避免缓存问题。
    • 感谢您的帮助,刚刚将代码更改为 RewriteCond %{ENV:HTTPS} !on RewriteRule ^zeugmarket.com [L,R=302] 不幸的是,没有骰子。我试图记住我曾经在我的 Windows 10 机器的命令提示符上写一些东西来刷新我的 PC 或其他东西,我这辈子都记不起来了。
    • RewriteCond %{ENV:HTTPS} !on RewriteRule ^ https://zeugmarket.com/ [L,R=302]
    猜你喜欢
    • 2011-08-21
    • 2013-01-18
    • 2019-06-18
    • 2011-07-02
    • 1970-01-01
    • 2020-03-14
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多