- Home
- Categorie
- Digital Marketing
- Posizionamento Nei Motori di Ricerca
- Impostazione corretta htaccess per evitare duplicazione home italiano e inglese
-
Io credo che il problema sia la %REQUEST
Prova come segue se ho ben capito cosa vuoi fare ora.
[PHP]
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index.php
RewriteRule ^index.php$ / [L,R=301]
[/PHP]
-
@Juanin said:
Io credo che il problema sia la %REQUEST
Prova come segue se ho ben capito cosa vuoi fare ora.
[PHP]
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index.php
RewriteRule ^index.php$ / [L,R=301]
[/PHP]Sei MITICOOOOOO, funziona!
p.s. visto che sei così bravo con l'htaccess, mi spiegheresti per favore (non capisco) come mai se faccio questo semplice redirect 301 succede questo:
Siccome ho spostato una "sotto-categoria" sotto un'altra "categoria" ho impostato questo semplice redirect 301 così:
redirect 301 /categoria-vecchia/sotto-categoria/ http: // w w w . nomesito .com/categoria-nuova/sotto-categoria/
Ma se clicco il vecchio URL nella serp di Google mi viene mostrato nella barra degli indirizzi questa URL:
http: // w w w . nomesito .com/categoria-nuova/sotto-categoria/?id=sotto-categoria
**E' come se mi "appendesse" nell' URL il nome della "sotto-categoria" associandola come valore ad una variabile "id"
**
Come posso evitare che crei questo URL strano, sbaglio qualcosa nel redirect 301 ?
-
Andrebbe controllato il waterfall.
L'append del parametro avviene dopo che atterri sulla pagina nuova oppure è direttamente già presente nel link in SERP?
-
@Juanin said:
Andrebbe controllato il waterfall.
L'append del parametro avviene dopo che atterri sulla pagina nuova oppure è direttamente già presente nel link in SERP?
(ciao)
No, avviene quando atterro sulla pagina nuova (non è presente nella SERP)
-
Mi incolli esattamente il tuo .htaccess?
-
@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
-
Prova ad usare una redirectMatch 301 invece di redirect 301.
-
niente, ho provato sia con il redirectMatch che con il RewriteRule ma nulla ...
-
Prova a mettere il $ alla fine della redirect match.
Giusto per info non è che hai anche altre regole di redirect nell'htaccess?
-
@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
-
Si devi incollarmi tutto l'htaccess per capire come ti avevo scritto prima.
Quel redirect avviene a causa di un'altra regola.
-
@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/
-
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
-
Ciao.
Sì lo puoi spegnere utilizzando un'operatore logico che dica !valore.
-
@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
-
Nelle RewriteCond basta che metti !regolachevuoi.
-
ok ho provato varie regole, come mi hai suggerito tu, alla fine solo questa regola funziona in parte*:
RewriteCond %{REQUEST_URI} "/en/"
RewriteRule (.*) $1Con 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 ?
-
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/
-
@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)...
-
Io non ho capito bene cosa vuoi fare.
Riesci a farmi una lista delle cose che dovrebbero succedere in modo sintetico.