- Home
- Categorie
- Digital Marketing
- Posizionamento Nei Motori di Ricerca
- Impostazione corretta htaccess per evitare duplicazione home italiano e inglese
-
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.
-
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)
-
Allora lascia tutte le condizioni e usa una condizione di esclusione in aggiunta con match esatto su /en/
%{REQUEST_URI}!=/en/
-
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) ...
-
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
-
@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 ?
-
@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