Web 浏览器不会隐藏主机和路径之间的 URL 中的根斜杠

Web 浏览器不会隐藏主机和路径之间的 URL 中的根斜杠


在此先感谢所提供的任何帮助。


更新:谢谢杰拉德·H·皮勒阿德里安回复和一些日志调查,我开始对问题进行一些转变。
现在我坚定地意识到,最后的斜线http://example.com/不是路径中的简单尾部斜线,而是 URL 之间硬记录的一部分港口小路:
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
(很惭愧自己不知道)
但是,为什么我的浏览器在常规行为中不隐藏那个斜线吗?可能是因为 http: 而不是 https:?(非常大胆的猜测)


nginx/1.6.2
Apache/2.4.10
Debian 8.10

我正在使用 Nginx 作为 Apache 的反向代理(N 代表处理非 php 和静态数据,A 显然代表 php)。

不知怎的,我无法让 Nginx 进行重写以遵循常见的建议,删除尾部斜杠,使其http://example.net/看起来像http://example.net

现在我的 nginx 虚拟主机配置文件如下所示:

server {
    listen   80;

    root /var/www/example.net/;
    index index.html index.htm;

    server_name example.net;

    #Can't make this work as intended
    rewrite ^http://(example.net)/$ http://$1 permanent;
    #Also tried
    #rewrite ^http://(.*)/$ http://$1 permanent;
    #And
    #rewrite ^/(example.net)/$ /$1 permanent;

    location / {
    try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {

    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8080;

     }

     location ~ /\.ht {
            deny all;
    }
}


@GerardH.Pille,嗯,是的,你是对的:如果我像那样使用正则表达式重写^(.*)/$ $1;,它实际上会匹配“/”,但会出现零长度错误……(这并不奇怪)……

2018/01/17 20:42:39 [notice] 1309#0: *5 "^(.*)/$" matches "/", client: 10.0.2.2, server: example.net, request: "GET / HTTP/1.1", host: "example.net"
2018/01/17 20:42:39 [notice] 1309#0: *5 rewritten data: "", args: "", client: 10.0.2.2, server: example.net, request: "GET / HTTP/1.1", host: "example.net"
2018/01/17 20:42:39 [error] 1309#0: *5 the rewritten URI has a zero length, client: 10.0.2.2, server: example.net, request: "GET / HTTP/1.1", host: "example.net"

但是,这个根斜线如何在任何正常站点上隐藏起来呢?

答案1

基本上,浏览器显示没有尾部斜杠的 URL 只是为了美观。当它发出请求时,它仍然会要求

GET / HTTP/1.1
主机:任何地方。

等等。在这种情况下 / 是路径。您不能有空路径。根路径是 /。

相关内容