Der Webbrowser blendet den Schrägstrich zwischen Host und Pfad nicht aus

653
Denis.Z


Vielen Dank im Voraus für jegliche Hilfe.


Update: Panzer an Gerard H. Pille, Adrien Antworten und einige Ermittlungen der Protokolle Ich bin gekommen, um die Frage etwas zu transformieren.
Jetzt ist mir klar, dass der letzte Schrägstrich http://example.com/kein einfacher abschließender Schrägstrich im Pfad ist, sondern ein hart dokumentierter Teil der URL zwischen Port und Pfad :
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
(sehr beschämt, weil er das nicht weiß).
Aber warum versteckt mein Browser diesen Schrägstrich nicht sein konventionelles Verhalten? Könnte es wegen http: statt https :? (sehr wilde Vermutung)


nginx / 1.6.2
Apache / 2.4.10
Debian 8.10

Ich benutze Nginx als Reverse-Proxy für Apache (N verarbeitet nicht-php und Statik, A ist offensichtlich für php).

Irgendwie kann ich Nginx nicht dazu veranlassen, ein Umschreiben durchzuführen, um der allgemeinen Empfehlung zu folgen, um den nachstehenden Schrägstrich zu entfernen, um http://example.net/aussehen zu lassenhttp://example.net

Nun sieht meine Nginx Virtual Host-Konfigurationsdatei folgendermaßen aus:

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, na ja, du hattest recht: wenn ich regexp umschreibe ^(.*)/$ $1;, stimmt das eigentlich mit "/" überein, aber Fehler Zero Length tritt auf ... (was nicht überraschend ist) ...

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" 

Aber wie wird dieser Root-Slash an jeder normalen Site verborgen?

0
Wo haben Sie diese Empfehlung gefunden? Wenn ich in meinem Browser nach "www.duckduckgo.com" frage, erhalte ich eine Weiterleitung mit dem Header "Location https: // duckduckgo.com /". Dies ist kein abschließender Schrägstrich, sondern der Beginn des Pfades, immer '/'. https://en.wikipedia.org/wiki/URL#Syntax PS. aber mein Browser verbirgt diesen Schrägstrich. Gerard H. Pille vor 6 Jahren 2
@ GerardH.Pille Ja, ich weiß, dass der Pfad nicht beginnt :) und eine Kennung eines Verzeichnisses (keine Datei). Und für root sollte der Schrägstrich nachlaufen, wenn ich mich nicht irre, aber unsicher :) Wenn ich es richtig verstanden habe, gehen solche Umschreibungen meist nur kosmetische Änderungen mit URI in der Adressleiste ein. Es sollte also keine Weiterleitung erfolgen ... Wenn ich `example.net` besuche, verdeckt mein Browser in diesem Fall den letzten Schrägstrich nicht :( Denis.Z vor 6 Jahren 0
Lass die Regel fallen, Denis, du hast wahrscheinlich bessere Dinge zu tun? Gerard H. Pille vor 6 Jahren 0
@ GerardH.Pille, absolut :) Aber dieser Unterschied ist das Verhalten von Websites ziemlich ärgerlich ... Und ich würde gerne wissen, warum das so ist :) Denis.Z vor 6 Jahren 0
Setzen Sie `rewrite_log on;` und `error_log xxxxx notice;`, laden Sie Ihre Konfiguration neu und überprüfen Sie, ob die Umschreibung Ihrer Anforderung entspricht. Gerard H. Pille vor 6 Jahren 0
@ GerardH.Pille, danke für den Rat, die Situation ist etwas klarer geworden. Die Frage wurde aktualisiert. Denis.Z vor 6 Jahren 0

1 Antwort auf die Frage

0
Adrien

Im Grunde ist der Browser, der eine URL ohne nachstehenden Schrägstrich zeigt, nur kosmetisch. Wenn es die Anfrage stellt, fragt es immer noch nach

GET / HTTP / 1.1-
Host: überall.

etc. in diesem Fall / ist der Pfad. Sie können keinen leeren Pfad haben. Der Wurzelpfad ist /.

Entschuldigung, die Site hat die neue Zeile zwischen GET / HTTP / 1.1 entfernt. und der Host-Header. Kann es auch nicht bearbeiten ... seufzen. Adrien vor 6 Jahren 0
Ein doppeltes Leerzeichen am Ende einer Zeile setzt die nächste Zeile in die eigene Zeile. Michael Frank vor 6 Jahren 0
@Adrien, danke für deine Antwort, es ist wirklich so. Ich habe meine Frage aufgrund neuer Informationen geändert. Denis.Z vor 6 Jahren 0