Ich benutze HAProxy Anhören auf 80, um Anfragen an einen Knoten-Server (Port: 3000) oder PHP-Server (4000) zu senden; Ich habe auch CSF installiert, die Ports 3000 und 80 zur Verfügung haben.Wie zu 404 umgeleitet wird, wenn URL auf einen vorhandenen Ordner verweist (kein abschließender Schrägstrich). HAproxy oder mod-rewrite related
Es funktioniert in Ordnung, wenn ich eine Seite auf http://example.com/forum/1/page.php
, nach aber manchmal, wenn ich versehentlich example.com/forum/1
(ohne Schrägstrich) eingeben, hält es Laden und führt schließlich zu einer Fehlerseite ERR_CONNECTION_TIMED_OUT
. Die Adressleiste zeigt an, dass sie an http://example.com:4000/forum/1/
umgeleitet wurde.
Da ich den 4000 Port nicht geöffnet habe, wenn ich mehrmals auf example.com/forum/1
gehe, würde es eine Blockierung durch CSF auslösen. Meine Frage ist, kann ich alle Anfragen umleiten, die auf einen tatsächlichen Ordner example.com/forum/1
(kein abschließender Schrägstrich) zu einer 404 Seite verweisen? Ich habe versucht, eine Rewrite-Regel hinzuzufügen, um jeder Anfrage einen Schrägstrich hinzuzufügen, aber das würde alle meine relativen Pfade durchbrechen (siehe mein Problem bei dieser post).
Also was ich wissen will ist, warum wurde ich umgeleitet http://example.com:4000/forum/1/
von http://example.com/forum/1
? Wurde es von HAproxy verursacht?
Einig HAProxy config:
frontend all 0.0.0.0:80
timeout client 1h
# use apache2 as default webserver for incoming traffic
default_backend apache2
backend apache2
balance roundrobin
option forwardfor
server apache2 myIpAddress:4000 weight 1 maxconn 1024 check
# server must be contacted within 5 seconds
timeout connect 5s
# all headers must arrive within 3 seconds
timeout http-request 3s
# server must respond within 25 seconds. should equal client timeout
timeout server 25s
Hier sind meine Rewrite-Regeln:
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule^- [L]
RewriteCond %{REQUEST_URI} !^.*\.(jpg|css|js|gif|png)$ [NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]
RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^([^\.]+)$ $1.php [NC,L]
Haben Sie in dieser Antwort etwas falsch gefunden? – anubhava