Sto utilizzando HAProxy in ascolto su 80 per inviare richieste a un server nodo (porta: 3000) o server php (4000); Ho anche installato CSF che dispone di porte 3000 e 80 disponibili.Come reindirizzare a 404 quando url punta a una cartella esistente (nessuna barra finale). HAproxy o mod-rewrite related
Funziona bene quando passo in rassegna una pagina alla http://example.com/forum/1/page.php
, ma a volte quando ho accidentalmente entro example.com/forum/1
(senza barra finale), mantiene il carico e alla fine porta ad una pagina di errore ERR_CONNECTION_TIMED_OUT
. La barra degli indirizzi mostra che è stato reindirizzato a http://example.com:4000/forum/1/
.
Poiché non ho la porta 4000 aperta, quando continuo a passare a example.com/forum/1
più volte, si innescherebbe un blocco tramite CSF. La mia domanda è, posso reindirizzare tutte le richieste che puntano a una cartella effettiva example.com/forum/1
(nessuna barra finale) su una pagina 404? Ho provato ad aggiungere una regola di riscrittura per aggiungere una barra finale ad ogni richiesta, ma ciò interromperà tutti i miei percorsi relativi (vedi il mio problema in questo post).
Quindi, quello che voglio sapere è, perché sono stato reindirizzato a http://example.com:4000/forum/1/
da http://example.com/forum/1
? È stato causato da HAproxy?
Alcuni config HAproxy:
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
Ecco le mie regole di riscrittura:
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]
Hai trovato qualcosa di sbagliato in questa risposta? – anubhava