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>