• 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
    

  • User Attivo

    @Juanin said:

    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
    >```
    
    
    Ho provato e forse ho capito perchè non funziona bene ...
    Ho provato ad usare questo set e funziona tutto, anche l'home page in inglese con il percorso "/en/" ... **funziona tutto tranne qualsiasi URL che sta viene generato all' interno della cartella "/en/"** ...
    
    RewriteCond %{REQUEST_URI} "/en/"
    RewriteCond %{REQUEST_URI}!=/en/
    RewriteRule (.*) $1 
    
    **Cioè tutti questi URL (e simili) funzionano**:
    
    w w w . nomedominio . com /prodotti/regali/
    w w w . nomedominio . com /prodotti/regali/bottiglie-e-thermos/
    ........... (in sostanza qualsiasi URL nella versione italiana, quindi qualsiasi URL che viene generato e che ovviamente non è contenuto nella cartella "/en/" funziona) ..............
    
    **Mentre tutti questi URL (e simili) che che vengono tutti generati dentro la cartella "/en/" (perchè siamo nell' inglese) non funzionano**:
    
    w w w . nomedominio . com / en /products/gifts/
    w w w . nomedominio . com / en /products/gifts/thermos/
    .......... (qualsiasi URL contenuto nella cartella "/en/") ............
    
    Quindi **dovremmo trovare un modo per far sì che qualsiasi URL contenuto nella cartella "/en/" funzioni con il rewriterule**, cosa che **adesso è bloccata** in qualche modo da questo set di regole.
    
    Secondo me è la seconda delle tre regole usate che non va bene ... cosa ne dici ?
    
    

  • User Attivo

    @Juanin said:

    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
    >```
    
    
    Alla fine dopo giorni e giorni, ore e ore di ricerca e test sono riuscito a risolvere così:
    
    RewriteCond %{REQUEST_URI} ^/en[/]?
    RewriteCond %{REQUEST_URI} !^/en/products[/]?
    RewriteRule (.*) $1 
    
    Siccome tutte le URL delle categorie, sotto-categorie e prodotti sono dentro la cartella "/en/products/" ho fatto in modo che da questo URL tutto fosse attivo a livello di rewriterule.
    
    Così funziona ... blocca il rewriterule solo sul percorso specifico "/en/".
    
    Ciao