Эксперты htaccess: перенаправить все, кроме root, на один TLD, перенаправить root на другой TLD — WordPress

Приветствуется помощь гуру.

Меня попросили разместить домашнюю страницу WordPress клиента в одном домене верхнего уровня (например, domain.eu), а все остальные страницы/каталоги сделать 301-й для другого расширения домена верхнего уровня (например, domain.com/everything-else). Не уверен, почему это запрашивается, но, видимо, это важно для клиента, и я ломал голову, чтобы заставить его работать. Есть идеи?

ПРИМЕРЫ:

Если URL-адрес попадает в корни любого TLD домена, они должны быть перенаправлены на домен .eu (http://domain.eu/), но все остальное должно идти на домен .com (http://domain.com/)

Корни:

http://domain.com  OR
http://domain.net  OR
http://domain.edu/index.php OR
http://domain.org/index.html  OR
http://domain.* (* = any extension)

301 Кому: http://domain.eu

Однако все остальное должно поддерживать структуру каталогов и перенаправляться на другой TLD (http://domain.com). Примеры..

От:

    http://domain.net/blog/category

301 Кому:

    http://domain.com/blog/category

От:

    http://domain.org/blog/category/post

301 Кому:

    http://domain.com/blog/category/post

Все, что я пробовал, заканчивается циклами перенаправления или лишь частично успешным. Например, ниже расположен над перенаправлениями WordPress, и он перенаправляется правильно в том смысле, что все целевые URL-адреса попали, но корень (домашняя страница) имеет ошибку цикла перенаправления. Есть предположения?

RewriteEngine On
RewriteBase /
Options +FollowSymLinks

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RedirectMatch ^/$ http://domain.eu

RewriteCond %{REQUEST_URI} !^/$ [NC]
RewriteCond %{HTTP_HOST} ^domain.com.au$ [NC,OR]
RewriteCond %{HTTP_HOST} ^domain.eu$ [NC,OR]
RewriteCond %{HTTP_HOST} ^domain.de$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

Я немного новичок в htaccess, поэтому дайте мне знать, как я ошибаюсь, спасибо!


person Zach Fitzgerald    schedule 22.05.2012    source источник


Ответы (2)


попробуйте заменить redirectmatch следующим.

RewriteCond %{HTTP_HOST} !^domain.eu$ [NC]
RewriteRule ^/?$ http://domain.eu/ [R=301,L]
person Gerben    schedule 22.05.2012
comment
Пожалуйста. RedirectMatch принадлежит mod_alias, а не mod_rewite. Смешивание этих двух компонентов иногда может вызвать проблемы, поэтому лучше этого избегать. - person Gerben; 25.05.2012

WordPress будет перенаправлять любые URL-адреса, которые не соответствуют домену в конфигурации WordPress. Вам нужно либо написать плагин WP, либо использовать прокси, чтобы получить домашнюю страницу для другого домена.

person Mahmoud Al-Qudsi    schedule 22.05.2012