Newsgroup: it.comp.www.php
Titolo: htaccess strani

Sto trovando che molti siti e blog hanno un problema uguale al mio.
Se all'url di una pagina di aggiunge uno slash e poi un numero a piacere di parole viene visualizzata la pagina 
precedente ma con tutta la schifezza aggiunta dopo.
Ma si capisce meglio dall'esempio:
http://my.jetscreenshot.com/5512/20160926-2t9t-37kb.jpg
 
 
-- 
Greg


Non è un problema, è la pagina 404 senza scritto 404.

Il 26/09/16 11:51:15 fmigliori ha scritto:

No, non è questo.
Pure l'Ansa è raggiungibile a 
ansa.it
 + 3 barrette rovesciate, e la pagina 404 ce l'hanno, come ce l'ho io:
http://www.ansa.it///
 
 
Aranzulla per esempio cancella le barrette e restituiesce l'url pulita, se c'è, altrimenti 404
 
-- 
Greg


So di non aver centrato perfettamente la tua domanda, ma ti rispondo comunque.
Ci sono due livelli di errore 404.
Uno è quello invocato da apache (manipolabile con htaccess e vhost) che non trova 
un file fisico sul disco, l'altro è invocato dall'applicativo, php o altro, che dagli 
argomenti inviati non trova la pagina logica.
Nel secondo caso può fare due cose:
1. restituisce come output la pagina 404;
2. restituisce come output un header un errore 404, che può portare a un pagina 
sia fisica che logica.
Nel secondo caso troverai l'uri come lo gradisci te in quanto non è una rielaborazione del uri precedente.
A causa del mod_rewrite magari non è facile risalire a quale livello avvenga.
In entrambi casi non ci sono errori, ne problemi, per questo lo trovi in molti siti.
 
Per quanto riguarda 
ansa.it
 io non riesco più a raggiungerlo.
Che tu abbia esagerato con le '/'? :p
Infine una domanda retorica: ma davvero ci sono tutti questi utenti che guardano 
l'uri di un link? O che editano l'uri per cui senza mod_rewrite avrebbero problemi 
a consultare il sito?
 
Il mod_rewrite sarebbe da abolire perché stupido (e lì si alzò il flame dei flame). 

 a consultare il sito?
 
No, il punti,, il dubbio è che Google, i motori di ricerca, vedendo che la stessa pagina è raggiungibe per url diverse, 
magari le vedano come pagine duplicate, e in effetti non avrebbero torto: url diversa, contenuto identico.
 
Se tu provi con 
http://www.aranzulla.it///
 riscrive url senza barre
Sto facendo vari tentativi da ieri ma senza riuscirci. Dovrei trovarmi una rguida for dummy di regex
 
-- 
Greg

 Sto facendo vari tentativi da ieri ma senza riuscirci. Dovrei trovarmi una
rguida for dummy di regex
 
http://www.marioconcina.it/blog/come-fare/guida-alle-espressioni-regolari-regex.html
 
 
 


 
Per quanto riguarda "le barre": è giusto così, da specifiche "/" e "///" sono lo
stesso percorso. Per quanto riguarda gli URL di root, avere "/" e nulla idem.
Non avrai mai il problema di URL doppi, se è questo che ti preoccupa perché,
appunto, la risorsa puntata è per definizione la stessa.
 
Se non lo vuoi per motivi estetici (?!?) puoi fare match con gli slash alla
fine (qualcosa tipo ^([^/*])/*$ rewrite su \1) ma non vedo perché dovresti.
 
Ciao!


Perchè pensavo fossero url diverse che potessero dare origine a duplicati
 
-- 
Greg


Vai tranquillo.
Nel caso di dubbi per altri casi limite, magari non così immediati, RFC 3986,
alla sezione 3.3 c'è l'ABNF.
 
Ciao!
 
P.S. Magari c'è un RFC più recente, non ho controllato, il tal caso fatemelo
sapere.. in ogni caso il concetto sarà sempre quello :)


 
Beh, non va mica usato per forza, se ne è fatto a meno per anni! :)
 
Come per tutti gli strumenti abbastanza potenti, se lo sai usare bene ti
risparmia lavoro, altrimenti ti ci puoi facilmente fare male. :)
 
Per inciso, specialmente se lo sai usare bene, avrai due, massimo tre, regole
per ogni sito, visto che far fare al webserver una caterva di regexp ogni
richiesta non mi pare una scelta tanto felice.
 
Ciao!

 Vai tranquillo.
 
Però mi accetta anche 
www.miosito.it/////questapaginasaramai
 
ossia qualsiasi lettera dopo le barrette. Pure questo è nelle specifihce?
 
-- 
Greg


Sempre per la sezione di prima, lo URI è valido, avendo (con gli stessi nomi)
5 segment, di cui 4 path-empty. Per le regole di risoluzione sempre lo stesso
documento, sezione 5 (e ovviamente dicono che punta a "/questapaginasaramai").
 
Ciao!
 
 
P.S. io sto solo ripetendo le specifiche, che di sicuro apache o i bot di
Google seguono: non escludo però sia possibile trovare software scritto coi piedi
da chissà chi, che invece non lo faccia; per quello bisogna alzare le mani
(su chi ha scritto tale codice).

 (su chi ha scritto tale codice).
 
Ah non discuto di questo, io sono solo un onesto copiatore :)
 
In ogni caso, per farla semplice, il problema duplicati è risolto all'origine con il rel=canonical, ma avevo lo stesso 
la cusiosità di sapere come fa aranzulla a ripulire slash multipli a fine url mentre altri siti no
 
-- 
Greg

 altri siti no
 
Probabilmente con un plugin di wordpress. :D
 
C'è sicuramente il modo, lavorando di regexp su rewrite, ma oggi non ho 
molto tempo per fare test, sorry. :)
 
Bye.
 
 

 
 
Se usi apache qualcosa di questo tipo nello .htaccess dovrebbe andare (magari
ricontrolla le regexp, dovrei aver preso tutti i casi, ma non so):
 
# rimuovi slash spuri all'inizio (controllando sulla stringa di richiesta, che
# altrimenti hai l'URI ripulito in testa)
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$ [OR]
RewriteCond %{THE_REQUEST} ^[A-Z]+\s(.*/)/+\sHTTP/[0-9.]+$
RewriteRule .* http://%{HTTP_HOST}/%1 [R=301,L]
 
# rimuovi dallo URI qualsiasi altro slash doppio
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
 
Non dovrebbe essere difficile far funzionare questa roba anche nel caso ti serva
un redirect fisso ad una pagina (come il tipico tutto allo index.php) o tu sia
sotto virtualhost, ma prima d'usarlo in produzione controlla.
 
Ciao!
 


Questa funziona, grazie :)
Ma è difficile anche solo leggerla, non dico capirla.
Domani voglio provare a decifrarla con la tabella dei simboli davanti
 
-- 
Greg

 
 
Figurati :)
A leggere queste regexp con i simboli davanti è facile, non ci sono cose strambe
dentro: facci sapere se, come molto probabile, trovi qualche errore!
 
Ciao!

 Ciao!
 
Allora vorrebbe dire che son diventato bravo :)
Una cosa che trovo è lo scope del parametro L.
Non fare altri revwirte per questa url, credo significhi, ma si riferisce solo a quella rewritecond oppure a tutte le 
successive?
 
-- 
Greg

 Ciao!
 
Allora vorrebbe dire che son diventato bravo
Una cosa che non trovo è lo scope del parametro L.


 
 
Quando c'è un match, se la rule ha [L] non vengono controllate le altre
conditions successive: si interrompe il processo (tipo "break" in PHP per capirci,
come dice la documentazione di apache,
http://httpd.apache.org/docs/current/rewrite/flags.html#flag_l
).
 
Ciao!