• Admin

    Mi incolli esattamente il tuo .htaccess?


  • User Attivo

    @Juanin said:

    Mi incolli esattamente il tuo .htaccess?

    Ecco:

    redirect 301 /tavola/bottiglie-e-thermos/ http: // w w w . nomesito .com/idee-regalo/bottiglie-e-thermos/

    Il risultato è (se lancio la vecchia URL di cui sto facendo il redirect):

    http: // w w w . nomesito .com/idee-regalo/bottiglie-e-thermos/?id=bottiglie-e-thermos


  • Admin

    Prova ad usare una redirectMatch 301 invece di redirect 301.


  • User Attivo

    niente, ho provato sia con il redirectMatch che con il RewriteRule ma nulla ...


  • Admin

    Prova a mettere il $ alla fine della redirect match.

    Giusto per info non è che hai anche altre regole di redirect nell'htaccess?


  • User Attivo

    @Juanin said:

    Prova a mettere il $ alla fine della redirect match.

    Giusto per info non è che hai anche altre regole di redirect nell'htaccess?

    Ciao, avevo già provato con il $ ma niente ...

    Sì, nell' htaccess ci sono diverse altre regole, scusami se non te l'ho spiegato prima o fatto capire ... 😞
    Non ci avevo pensato ...

    Quindi vuoi vedere, come mi stai suggerendo tu, che magari va in conflitto con ad esempio questa regola (la seconda riga) che riscrive le "sotto-categorie" ?

    RewriteRule ^([^/])/$ /categoria.php?id=$1
    RewriteRule ^([^/]
    )/([^/]*)/$ /sotto-categoria.php?id=$2


  • Admin

    Si devi incollarmi tutto l'htaccess per capire come ti avevo scritto prima.

    Quel redirect avviene a causa di un'altra regola.


  • User Attivo

    @Juanin said:

    Si devi incollarmi tutto l'htaccess per capire come ti avevo scritto prima.

    Quel redirect avviene a causa di un'altra regola.

    Ecco il mio .htaccess:

    
    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} ^nomesito .com 
    RewriteRule ^(.*)$ http: // w w w . nomesito .com/$1 [L,R=301]
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php
    RewriteRule ^index\.php$ / [L,R=301]
    
    # Pagina 404
    ErrorDocument 404 /404.php
    
    # Designer e Brand
    RewriteRule ^Designer/([^/]*)/([0-9]*)$ /designer-selezionato.php?designer=$2 
    RewriteRule ^Brand/([^/]*)/([0-9]*)$ /brand-selezionato.php?brand=$2 
    
    # Scheda prodotto
    RewriteRule ^([^/]*)/([^/]*)_([0-9]*).php$ /scheda-prodotto.php?id=$3 
    
    # Sotto Categoria
    RewriteRule ^([^/]*)/([^/]*)/$ /sotto-categoria.php?id=$2 
    RewriteRule ^([^/]*)/([^/]*)/page/([0-9]*)$ /sotto-categoria.php?id=$2&sheet=$3 
    RewriteRule ^([^/]*)/([^/]*)/page/([0-9]*)/([a-z]*)$ /sotto-categoria.php?id=$2&sheet=$3&by=$4 
    
    # Categoria
    RewriteRule ^([^/]*)/$ /categoria.php?id=$1 
    RewriteRule ^([^/]*)/page/([0-9]*)$ /categoria.php?id=$1&sheet=$3 
    RewriteRule ^([^/]*)/page/([0-9]*)/([a-z]*)$ /categoria.php?id=$1&sheet=$2&by=$3 
    
    # Redirect 301
    redirect 301 /tavola/bottiglie-e-thermos/ http: // w w w . nomesito .com/idee-regalo/bottiglie-e-thermos/
    
    

  • User Attivo

    Ciao Juanin ... grazie a te, in questo post (nella prima parte), sistemammo l'URL di raggiungimento della versione italiana e inglese del mio sito, cioè:

    sito in italiano raggiungibile con la radice del dominio "w w w . nomedominio . com"
    sito in inglese raggiungibile con l'URL "w w w . nomedominio . com / en / index.php"

    Ti ricordi ?
    Mi hai aiutato perchè non potevo usare la cartella "w w w . nomedominio . com / en /" perchè a livello di rewriterule mi creava conflitto con l'italiano (ad esempio con i nomi delle categorie raggiungibili con un url simile w w w . nomedominio . com / categoria /)

    Ora, dannazione, ho scoperto che nella search console di google non posso indicare il target geografico per l'inglese in quanto l'URL fa riferimento ad un file e non ad una cartella.

    Cioè quando gli provo a dare l'URL "w w w . nomedominio . com / en / index.php" mi dice che è errato in quanto fa riferimento ad un file e non ad una cartella.

    Come posso risolvere secondo te ?
    Non c'è un modo per "spegnere" il rewriterule solo per la cartella "en" (la radice) e non tutti i suoi contenuti, tipo "w w w . nomedominio . com / en / products / table" ?

    Ciao e grazie


  • Admin

    Ciao.

    Sì lo puoi spegnere utilizzando un'operatore logico che dica !valore.


  • User Attivo

    @Juanin said:

    Ciao.

    Sì lo puoi spegnere utilizzando un'operatore logico che dica !valore.

    Ciao e grazie innanzitutto per la risposta!
    Mi fai un esempio per favore ? giusto per darmi una dritta sulla quale poi fare delle prove e lavorarci su ?

    Grazie


  • Admin

    Nelle RewriteCond basta che metti !regolachevuoi.


  • User Attivo

    ok ho provato varie regole, come mi hai suggerito tu, alla fine solo questa regola funziona in parte*:

    RewriteCond %{REQUEST_URI} "/en/"
    RewriteRule (.*) $1

    Con questa regola però se digito

    w w w . nomedominio . com / en /

    *adesso funziona e si carica la versione inglese del sito (con questo URL) ma tutti gli URL che stanno sotto questa cartella NON VENGONO (ovviamente) PIU' RISCRITTI DAL REWRITERULE, esempio:

    http: // w w w . nomesito .com/en/products/gifts/
    (URL TIPICO DI UNA CATEGORIA DEL SITO INGLESE)

    oppure

    http: // w w w . nomesito .com/en/products/gifts/thermos/
    (URL TIPICO DI UNA SOTTO CATEGORIA DEL SITO INGLESE)

    Quindi in sostanza sono riuscito a evitare che venga eseguito il rewriterule della cartella specifica /en/ (e quindi OK) ma ORA DEVO far in modo che il reriterule VENGA ESEGUITO su qualsiasi cartella al suo interno, altrimenti la parte inglese non funziona ...

    Come posso fare ?


  • Admin

    Devi fare il match esatto solo su !/en/ in modo che non contempli le sottocartelle.

    Gusto per fare un esempio potresti dire tutte quelle che iniziano e finiscono con /en/.

    Se invece ti serve Match esatto di URL puoi fare senza regexp %{REQUEST_URI} =/en/


  • User Attivo

    @Juanin said:

    Devi fare il match esatto solo su !/en/ in modo che non contempli le sottocartelle.

    innanzitutto grazie per la risposta ... ma come si fa il match esatto su qualsiasi cartella tranne che su /en/, in modo che contempoli le sottocartelle ?
    E' proprio questo che non riesco a fare (per limiti miei ovviamente)...


  • Admin

    Io non ho capito bene cosa vuoi fare.

    Riesci a farmi una lista delle cose che dovrebbero succedere in modo sintetico.


  • User Attivo

    ok ... vorrei fare semplicemente questo:

    che quando digito questo URL NON VENGA eseguito il rewriterule:

    w w w . nomedominio . com / en /

    (con questo URL carico la home page in inglese)

    che quando digito un URL di questi tipi VENGA eseguito il rewriterule:

    w w w . nomedominio . com / en /products/gifts/

    w w w . nomedominio . com / en /products/gifts/thermos/

    (con questi URL carico una categoria o una sotto-categoria ma tramite l'uso del rewriterule ... per questo ho bisogno che per qualsiasi cartella che sta sotto /en/ mi funzioni il rewriterule ... o basterebbe dirgli che per la cartella /en/products/ funzioni il rewriterule, tanto qualsiasi contenuto sta sotto questa cartella in inglese)


  • Admin

    Allora lascia tutte le condizioni e usa una condizione di esclusione in aggiunta con match esatto su /en/
    %{REQUEST_URI}!=/en/


  • User Attivo

    mi devi scusare, porta pazienza (non ti arrabbiare, non sono molto pratico su questo tema ... :)), ma non capisco cosa intendi quando scrivi "lascia tutte le condizioni", intendi una cosa di questo tipo:

    RewriteCond %{REQUEST_URI} "/en/"
    RewriteRule (.*) $1
    RewriteCond %{REQUEST_URI}!=/en/

    Non ho capito come devo inserire la tua direttiva (e se nella stringa che hai scritto tu manca qualcosa o va messa pari pari a come l'hai scritta) ...


  • Admin

    Puoi fare in vari modi.

    Puoi combinare tutto in una sola regola o accodarne 2 o più prima della rewrite rule. Esempio:

    RewriteCond A
    RewriteCond B
    RewriteRule 1