Перенаправление .htaccess из статей поддоменов в основной домен - PullRequest
0 голосов
/ 12 апреля 2011

У меня есть субдомены: sub1.tld.com , sub2.tld.com и так далее. Этот поддомен содержит важную информацию. Но я хочу предотвратить открытие любых других URL, например: sub1.tld.com / anypage или sub2.tld.com / dir / more / anyurl.html . Эти URL должны быть перенаправлены на основной домен tld.com: tld.com / anypage или tld.com / dir / more / anyurl.html

Итак, я должен проверить 2 вещи перед перенаправлением:

  1. это любой поддомен
  2. это не корневая страница субдомена

Я создал следующие правила:

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

Этот набор правил работает должным образом (перенаправляет sub1.tld.com / anypage на tld.com / anypage ), но также перенаправляет sub1.tld.com до tld.com. Где ошибка? 2-я строка неверна?

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

По неизвестной причине наиболее надежной для проверки переменной был% {THE_REQUEST}, а не% {REQUEST_URI}.

% {THE_REQUEST} содержит необработанный запрос браузера к веб-серверу: например, GET /anypage.html HTTP / 1.1 , если вы открываете URL http://anysite.com/anypage.html.

Итак, вот вам полный рабочий набор правил для .htaccess:

RewriteCond %{HTTP_HOST}    ^.+\.tld\.com$
RewriteCond %{THE_REQUEST}  ^get\ /(.+)\ http.* [NC]
RewriteRule ^(.+)           http://tld.com/$1 [R=301,L]
2 голосов
/ 14 апреля 2011

Попробуйте это:

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

Или вы можете использовать эту строку, чтобы проверить, является ли она корнем:

RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ /\ HTTP/
...