- Home
- Categorie
- La Community Connect.gt
- Tutto sulla Community
- [MOD_RW] come ottenere un indirizzo valido sia con lo slash che senza
-
[MOD_RW] come ottenere un indirizzo valido sia con lo slash che senza
Buonasera a tutti. Mi sono imbattuto oggi in un problema che sembra una banalità, ma per il quale alla fine non ho trovato soluzione e sono certo che anche voi ci sarete imbattuti.
Dunque, la questione è semplicissima.
Se io creo un indirizzo virtuale del tipo:
miodominio.it/ciao/pasta-con-il-pomodoro/
è ovvio che se un utente lo digita a mano senza lo slash finale
miodominio.it/ciao/pasta-con-il-pomodoro
debba finire lo stesso su quella pagina o quanto meno debba essere indirizzato tipo con un 302 sull'indirizzo con lo slash.
Per quanto riguarda la gestione del "doposlash" ho deciso di passare tutto in un'unica variabile che si chiama "address".
di modo che ad esempio l'indirizzo di cui sopra diventa
index.php?address=ciao/pasta-con-il-pomodoro/
per fare questo ho usato questa semplice regola
RewriteRule ^(.*)/$ index.php?address=$1 ```e funziona perfettamente. Ovviamente questa implicherebbe l'obbligo dello slash finale. Ragione direbbe che la cosa è risolvibilissima aggiungendo un semplice asterisco dopo lo slash in modo da rendere l'ultimo slash "facoltativo" ai fini del match, una cosa del tipo:
RewriteRule ^(.)/$ index.php?address=$1
....c'è solo un problema però: al posto di passarmi come variabile address tutti quello che c'è dopo lo slash, il valore della variabile address è "index.php" !!!!!! ovvero la variabile address non cambia mai rendendo quindi inutile la riscrittura... Qualcuno di voi saprebbe per caso dirmi come mai? Nel caso non immaginiamo una soluzione a questo, mi chiedo, **c'è un modo per redirezionare indistintamente tramite htaccess tutti gli indirizzi che non hanno lo slash finale verso indirizzi che ce l'abbiano? ** Vi prego, veniamo di venirne a capo...è proprio una questione di orgoglio, come mai a volte noi sviluppatori siamo messi dinanzi a problemi all'apparenza così banali, ma a volte cosi apparentemente irrisolvibili? Grazie, per aver letto fin qui :fumato: vi aspetto numerosiiii :ciauz:
-
Ciao zumbo,
io farei così (è la prima cosa che mi viene in mente)RewriteRule ^(.)$ http://miodominio.it/$1 [R=301,L]
RewriteRule ^(.)/$ index.php?address=$1
Provala perchè io non ho avuto tempo di testarla, comunque il concetto è questo:Trasformi prima il path senza slash finale, aggiungendone uno. Poi traduco il path con lo slash finale in index.php?adress=ecc...
Spero di aver risposto alla tua domanda ! Altrimenti ci chiariamo meglio.
Ciauzz
-
@liberoguerra said:
Ciao zumbo,
io farei così (è la prima cosa che mi viene in mente)Provala perchè io non ho avuto tempo di testarla, comunque il concetto è questo:
Trasformi prima il path senza slash finale, aggiungendone uno. Poi traduco il path con lo slash finale in index.php?adress=ecc...
Spero di aver risposto alla tua domanda ! Altrimenti ci chiariamo meglio.
Ciauzz
Trovo la tua una soluzione molto acuta, anche se purtroppo non funziona.
In effetti però bisognerebbe almeno stabilire se l'indirizzo ha lo slash oppure no, prima di aggiungerlo.
In ogni caso non funziona, il redirect va in loop ed il browser da errore.
Ho provato ad integrare alcune modifiche alla tua idea...ma ancora niente.
Chissà.
-
Ho trovato un interessante articolo ad hoc (mydigitallife.info/2007/03/19/add-trailing-slash-to-the-end-of-the-url-with-htaccess-rewrite-rules/)
La soluzione è simile alla tua ma un po più complessa:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..+$ RewriteCond %{REQUEST_URI} !/$ RewriteRule (.*) wwwsitocom/$1/ [R=301,L] ```funziona ;)
-
Allora ho modificato un pò le regole.
Prova con queste...dovrebbero funzionare
RewriteRule ^(((.+)/)([^/]+))$ http://miodominio.it/$1/ [R=301,L]
RewriteRule ^(.)/$ http://miodominio.it/index.php?address=$1/ [R,L]Fammi sapere
A presto
-
Oooppss,
hai trovato la soluzione 2 minuti prima che riuscissi a scrivere le mie regole.
-
@liberoguerra said:
Oooppss,
hai trovato la soluzione 2 minuti prima che riuscissi a scrivere le mie regole.wow...chissà se le tue funzionano ora...per caso le hai provate?
-
Si le ho provate...e sul mio server funzionano! Provale un pò.... un attimo solo però..
Ho riprovato le regole adesso con altri parametri e mi crea alcuni problemi.
Vediamo se riesco a mettere tutto a posto.
-
Finalmente ci sono riuscito ad eliminare il loop che il tuo problema logicamente creava.
Le regole sono le seguenti
RewriteEngine On
RewriteRule ^(.+).(.+)$ - [S=2,S=3,L]
RewriteRule ^((([^/]+)/)+)$ http://miosito.it/index3.php?address=$1
RewriteRule ^([^/]+/)*([^/]+)$ http://miosito.it/$1$2/ [R=301,L]
**Esempi fatti per capire il funzionamento di tali regole.**
Richieste http: (la freccia "->" indica i passaggi di trasformazione che avvengono con le regole sopra citate)
http://miosito.it -> http://miosito.it> http://miosito.it/ciao.php -> http://miosito.it/ciao.php> http://miosito.it/../../ciao.php -> http://miosito.it/../../ciao.php (profondità directory arbitraria)> http://miosito.it/ciao -> http://miosito.it/ciao/ ->> http://miosito.it/index.php?address=ciao/> http://miosito.it/../../ciao -> http://miosito.it/../../ciao/ -> http://miosito.it/index.php?address=../../ciao/ (profondità directory arbitraria)Ora sono sicuro che funziona
Spero di averti aiutato comunque.
Ciao ciao