htaccess substitui parte do URL com base na condição

1

Gostaria de redirecionar de um URL como http://www.example.de/this.xml

Para o .xml com o idioma correto, por exemplo, http://www.example.de/this-www.example.de.xml

O mesmo acontece com todas as outras línguas, por exemplo (de | com | eu ...)

Agora eu tenho isso, mas não sei como definir o idioma correto no RewriteRule :

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.(de|at|ch|com|nl|be|fr)$
RewriteCond %{REQUEST_URI} ^/this.xml$
RewriteRule ^(.*)$ /this-www.mydomain.$1(de|at|ch|com|nl|be|fr)$2.xml [R=301,L]
    
por Bird 14.11.2016 / 11:11

1 resposta

0

Você precisa verificar especificamente o ccTLD? Parece que você está simplesmente copiando o host no caminho da URL de destino?

Tente algo como o seguinte:

RewriteRule ^(this)(\.xml)$ /$1-%{HTTP_HOST}$2 [R=301,L]

Isso redirecionará permanentemente uma solicitação de http://www.example.de/this.xml para http://www.example.de/this-www.example.de.xml .

Note que se você já testou com o 301s, você precisa ter certeza de que todos os caches intermediários estão limpos, já que qualquer 301s anterior errônea será armazenado em cache. (Testar com 302s às vezes pode ser benéfico por esse motivo.)

But how would you have checked specifically for the ccTLD?

Para permitir apenas alguns ccTLDs selecionados e também capturar o TLD do host , você precisará usar uma diretiva RewriteCond e verificar a variável HTTP_HOST server, semelhante ao que você ter feito. No entanto, sua RewriteRule substituição está errada.

Por exemplo, você poderia fazer algo como:

RewriteCond %{HTTP_HOST} ^(www\.)?example\.(de|at|ch|com|nl|be|fr)$
RewriteRule ^(this)(\.xml)$ /$1-%2$2 [R=301,L]

Isso redirecionará http://www.example.de/this.xml para http://www.example.de/this-de.xml . Mas não faça nada com http://www.example.us/this.xml , pois o ccTLD não corresponde a um deles no CondPattern .

$1 e $2 são referências anteriores aos grupos capturados no padrão RewriteRule . Considerando que %2 é uma referência anterior ao segundo grupo capturado na última correspondência RewriteCond CondPattern .

NB: Você deve canonizar o domínio (ou seja, redirecionar para www ou não www) anteriormente em sua configuração, de modo que não seja necessário tornar www. opcional na regex acima (ou seja, (www\.)? ). / p>     

por 14.11.2016 / 11:32

Tags