Что такое код перенаправления .htaccess для выполнения следующих действий? - PullRequest
2 голосов
/ 29 мая 2011

В качестве аргумента давайте представим:

  • Мое доменное имя mydomain.com
  • У меня есть субдомены, такие как svn.mydomain.com

Я хочу:

  • Если человек вводит что-то, кроме mydomain.com, например, mydomain2.com, он должен перенаправить на mydomain.com
  • Если этот человек вводит ЛЮБОЙ доменБЕЗ субдомена, он должен перенаправить на www.mydomain.com, помня, что это правило не должно влиять на субдомены, такие как svn.mydomain.com
  • , если тип в svn.mydomain2.com, он должен перенаправитьна svn.mydomain.com

Любая помощь?

Решение на данный момент:

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

Это перенаправит все, что не включает namhost.com, вwww.namhost.com.Так, например: namhost.net -> namhost.com, www.namhosting.com -> namhost.com.Теперь мне просто нужны правила для:

  1. Исключая «localhost» из перенаправления на www.namhost.com
  2. Измените перенаправления поддоменов на namhost.com.Например: someSubDomain.parkeddomain.com должен перейти на someSubDomain.namhost.com.Реальный пример: ftp.namhosting.com -> ftp.namhost.com

Спасибо!

Ответы [ 4 ]

3 голосов
/ 21 ноября 2011
RewriteEngine On


#check if it's not mydomain.com
RewriteCond %{HTTP_HOST} !^(www\.)?mydomain\.com$ [NC]
#check if it's not a subdomain
RewriteCond %{HTTP_HOST} !^(.*)\.([A-Za-z0-9\-]+)\.(.{2,3}) [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([A-Za-z0-9\-]+)\.(.{2,3}) [NC]
#check if it's not one of determind sub-domains
RewriteCond %{HTTP_HOST} !^(svn|sql|pdf)\.([A-Za-z0-9\-]+)\.(.{2,3})$
#Redirect request to mydomain.com
RewriteRule (.*)  http://www.mydomain.com/$1 [R=301,L]


#check if it's sub-domain and it's not mydomain.com's subdomain
RewriteCond %{HTTP_HOST} !^(www\.)?mydomain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(svn|sql|pdf)\.mydomain\.com$
RewriteCond %{HTTP_HOST} ^(svn|sql|pdf)\.([A-Za-z0-9\-]+)\.(.{2,3})$  [NC]
RewriteRule (.*)  http://%3.mydomain.com/$1

дайте мне знать, если понадобятся какие-либо изменения!: -)

RewriteCond %{HTTP_HOST} !^(.*\.)?namhost\.com$ [NC]
RewriteCond %{HTTP_HOST} !^localhost$ [NC]
RewriteRule (.*)  http://%1namhost.com/$1 [R=301,L]
2 голосов
/ 29 мая 2011

Я использую что-то вроде этого ...

RewriteEngine On

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

Вы также можете перенаправить на https, сделав что-то вроде этого ...

RewriteCond %{http_host} ^mydomain.com/login.php [NC]
RewriteRule ^(.*)$ https://www.mydomain.com/login.php [R=301,L]
1 голос
/ 27 ноября 2011

Я применяю бритву Оккама здесь, предполагая, что ваши условия являются взаимоисключающими (следовательно, [L] для [last] правила), и что перенаправление в домен всегда означает перенаправление в корень документа.Вы должны знать, что mod_rewrite способен на гораздо большее .

Если человек вводит что-то, кроме mydomain.com, например mydomain2.com, он должен перенаправить на mydomain.com

будет

RewriteCond %{HTTP_HOST} !^mydomain\.com$
RewriteRule ^/.*$ http://mydomain.com/ [R,L]

Если человек вводит ЛЮБОЙ домен БЕЗ субдомена, он должен перенаправить на www.mydomain.com, имея в виду, что этоправило не должно влиять на субдомены, такие как svn.mydomain.com

будет

RewriteCond %{HTTP_HOST} ![^.]+\.[^.]+\.[^.]+$
RewriteRule ^/.*$ http://www.mydomain.com/ [R,L]

и

, если [y] тип в svn.mydomain2.com, он должен перенаправить на svn.mydomain.com

будет

RewriteCond %{HTTP_HOST} ^svn\.mydomain2\.com$
RewriteRule ^/.*$ http://svn.mydomain.com/ [R,L]

Не проверено.

1 голос
/ 23 ноября 2011

Ваше Правило1 не имеет явного субдомена

Если человек вводит что-либо кроме mydomain.com, например, mydomain2.com, он должен перенаправить на mydomain.com

и т. д. Правило2 противоречит Правило1

Если человек вводит ЛЮБОЙ домен БЕЗ субдомена, оннеобходимо перенаправить на www.mydomain.com

т.е. mydomain2.com по Правило1 должно перейти на mydomain.com, но на Правило2 , поскольку оно не имеетсубдомен, он будет идти к www.mydomain.com

Я предполагаю, что в правиле 1 вы имели в виду anysubdomain.non-mydomain.com должно перейти к www.mydomain.com.Если нет, уточните, поскольку приведенные ниже правила основаны на этом предположении.

Попробуйте добавить следующее в ваш .htaccess в корневом каталоге вашего сайта

RewriteEngine On
RewriteBase /

#redirect any domain without subdomain (including mydomain), to www.mydomain
RewriteCond %{HTTP_HOST} !^[^\.]+\.[^\.]\..+$ [NC]
#assume you do not want to carry over querystring or path just go to the root
RewriteRule .  http://www.mydomain.com/? [R=301,L]


#if it has a subdomain
RewriteCond %{HTTP_HOST} !^([^\.]+)\.([^\.])\..+$ [NC]
#that is not on mydomain
RewriteCond %2 !^mydomain$ [NC]
#and it is on the list of subdomains to redirect
RewriteCond %1 ^(svn|otherIncludedSubdomains)$ [NC]
#also assume no querystrings carried over here. If needed, remove the last?
RewriteRule .  http://(%1).mydomain.com/? [R=301,L]
...