Я хочу перенаправить с URL-адреса, например http://www.example.de/this.xml
К .xml
с правильным языком, например. http://www.example.de/this-www.example.de.xml
То же самое и с любым другим языком, т.е. (de | com | eu ...)
Прямо сейчас у меня есть это, но я не знаю, как установить правильный язык в 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]
Вам нужно специально проверять ccTLD? Похоже, вы просто копируете хозяин в целевой URL-путь?
Попробуйте что-нибудь вроде следующего:
RewriteRule ^(this)(\.xml)$ /$1-%{HTTP_HOST}$2 [R=301,L]
Это навсегда перенаправит запрос на http://www.example.de/this.xml
к http://www.example.de/this-www.example.de.xml
.
Обратите внимание, что если вы ранее тестировали с 301, вам нужно будет убедиться, что все промежуточные кеши очищены с любого более раннего ошибочный 301 будут кэшированы. (По этой причине иногда может быть полезно тестирование с 302).
Но как бы вы проверили конкретно ccTLD?
Чтобы разрешить только несколько избранных ccTLD, а также захватить TLD из хозяин тогда вам нужно будет использовать RewriteCond
директиву и проверьте соответствие HTTP_HOST
серверная переменная, аналогичная тому, что вы сделали. Однако ваш RewriteRule
замена неправильно.
Например, вы можете сделать что-то вроде:
RewriteCond %{HTTP_HOST} ^(www\.)?example\.(de|at|ch|com|nl|be|fr)$
RewriteRule ^(this)(\.xml)$ /$1-%2$2 [R=301,L]
Это перенаправит http://www.example.de/this.xml
к http://www.example.de/this-de.xml
. Но ничего не делать с http://www.example.us/this.xml
, поскольку ccTLD не соответствует ни одному из CondPattern.
$1
и $2
являются обратными ссылками на захваченные группы в RewriteRule
шаблон. В то время как %2
это обратная ссылка на вторую захваченную группу в последнем совпавшем RewriteCond
CondPattern.
NB: вы должны канонизировать домен (т.е. перенаправить на www или без www) ранее в вашей конфигурации, чтобы www.
необязательно в приведенном выше регулярном выражении (т.е. (www\.)?
) не должно быть необходимости.