+ Rispondi alla Discussione
Risultati da 1 a 9 di 9

[MOD_RW] come ottenere un indirizzo valido sia con lo slash che senza

Ultimo Messaggio di liberoguerra il:
  1. #1
    User L'avatar di zumbo
    Data Registrazione
    Jan 2007
    Messaggi
    102

    [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


    Codice:
    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:

    Codice:
    RewriteRule ^(.*)/*$ index.php?address=$1
    E infatti anche questo codice funziona benissimo.......

    ....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



    vi aspetto numerosiiii
    Ultima modifica di zumbo; 04-07-08 alle 01:49

  2. #2
    User L'avatar di liberoguerra
    Data Registrazione
    Apr 2008
    Località
    L'Aquila
    Messaggi
    86
    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 [L]
    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

  3. #3
    User L'avatar di zumbo
    Data Registrazione
    Jan 2007
    Messaggi
    102
    Citazione Originariamente Scritto da liberoguerra Visualizza Messaggio
    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à.

  4. #4
    User L'avatar di zumbo
    Data Registrazione
    Jan 2007
    Messaggi
    102

    [risolto]

    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:

    Codice:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !\..+$
    RewriteCond %{REQUEST_URI} !/$
    RewriteRule (.*) wwwsitocom/$1/ [R=301,L]
    funziona

  5. #5
    User L'avatar di liberoguerra
    Data Registrazione
    Apr 2008
    Località
    L'Aquila
    Messaggi
    86
    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

  6. #6
    User L'avatar di liberoguerra
    Data Registrazione
    Apr 2008
    Località
    L'Aquila
    Messaggi
    86
    Oooppss,
    hai trovato la soluzione 2 minuti prima che riuscissi a scrivere le mie regole.

  7. #7
    User L'avatar di zumbo
    Data Registrazione
    Jan 2007
    Messaggi
    102
    Citazione Originariamente Scritto da liberoguerra Visualizza Messaggio
    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?

  8. #8
    User L'avatar di liberoguerra
    Data Registrazione
    Apr 2008
    Località
    L'Aquila
    Messaggi
    86
    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.
    Ultima modifica di liberoguerra; 05-07-08 alle 01:59

  9. #9
    User L'avatar di liberoguerra
    Data Registrazione
    Apr 2008
    Località
    L'Aquila
    Messaggi
    86
    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 [L]
    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

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.