.htaccess 为什么我的网站URL末尾有双斜杠,如下所示://

.htaccess 为什么我的网站URL末尾有双斜杠,如下所示://,.htaccess,url,https,url-rewriting,.htaccess,Url,Https,Url Rewriting,当我输入我的网站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 "u

当我输入我的网站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;"
似乎有“其他东西”在添加额外的斜杠-因为这些指令,它不会发生

在我的网站URL的末尾,如下所示:
/

双斜杠实际上位于URL路径的开头,而不是严格意义上的结尾。如果您请求
http://example.com/foo
然后返回
https://example.com//foo

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

我会查找Nginx代理的配置问题,因为很可能是这个添加了额外的斜杠

顺便说一句,在这个例子中(根据您的评论)
%{$1}
不是严格有效的,并且总是会导致一个空字符串-因此双斜杠肯定不是来自Apache

但是,您似乎有一个单页网站。您在任何URL上没有任何URL路径?只有一个可见的URL,那就是
https://www.example.com/
,因此您的指令可以简化:

RewriteCond %{ENV:HTTPS} !on
RewriteRule ^ https://www.example.com/ [L,R=301]
请注意,主机名后面应该有一个斜杠(在URL路径的开头)。如果省略它,那么(通常)浏览器将在重定向请求中附加斜杠。(但Nginx似乎实际上是在重定向响应中附加了这些斜杠——在它到达浏览器之前)

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


我尝试了这些规则,但无法重现此问题。当您将
%{REQUEST_URI}
替换为
$1
时会发生什么情况?在匿名浏览器窗口中进行测试。我尝试使用匿名浏览器,结果相同,最后有两个斜杠。使用Microsoft edge进行了尝试,我的主机说:您好,我们确实使用nginx作为反向代理,但是apache处理.htaccess文件并执行所有mod重写,因此nginx实际上与apache处理.htaccess文件的方式无关。“因此nginx与apache处理.htaccess文件的方式无关。”-除了来自Apache的请求必须通过Nginx代理服务器返回,然后才能提供给客户端。您是否尝试了上面的最后一个示例,它只是重定向到
https://www.example.com/
(您的域)?事实上,如果您尝试完全删除此重定向,会发生什么情况?关键是,当它离开Apache时没有双斜杠(从上面发布的示例中),那么额外的斜杠是从哪里来的呢?(Nginx似乎是唯一的障碍?)请注意,301重定向由浏览器永久缓存,因此您需要确保在测试之前清除所有缓存。最好使用302(临时)重定向进行测试,以避免缓存问题。感谢您的帮助,刚刚将代码更改为RewriteCond%{ENV:HTTPS}!在重写规则时^[L,R=302]不幸的是,没有骰子。我试图记住我曾经在我的windows 10机器的命令提示符上写过一些东西来刷新我的PC或其他东西,我一辈子都记不起来了。
RewriteCond%{ENV:HTTPS}!关于重写规则^https://zeugmarket.com/ [L,R=302]
RewriteRule ^(.*)$ https://www.zeugmarket.com%{$1} [L,R=301]
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^ https://www.example.com/ [L,R=301]