在此先感谢所提供的任何帮助。
更新:谢谢杰拉德·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
主机:任何地方。
等等。在这种情况下 / 是路径。您不能有空路径。根路径是 /。