2014-12-15 4 views
0

Вопрос.htaccess подобласть редирект ошибка

Оценил понимание к тому, как .htaccess быть изменен, чтобы решить эту проблему подробно ниже.


фон

Суппорт сайт размещен на support.domain.com. Желательно иметь следующие варианты поведения

  • https://support.domain.com остается https://support.domain.com
  • http://support.domain.com перенаправляет https://support.domain.com
  • http://domain.com/support перенаправляет https://support.domain.com
  • http://www.domain.com/support перенаправляет https://support.domain.com
  • https://domain.com/support перенаправляет https://support.domain.com
  • https://www.domain.com/support переадресовывает на https://support.domain.com

Проблема в том, что наблюдается следующее поведение.

  • https://support.domain.com перенаправляет на https://www.domain.com [ОШИБКА]
  • http://support.domain.com перенаправляет на https://www.domain.com [ОШИБКА]
  • http://domain.com/support перенаправляет на https://www.domain.com [ОШИБКА]
  • http://www.domain.com/support перенаправляет на https://www.domain.com [ОШИБКА]
  • https://domain.com/support перенаправляет на https://domain.com/support/ (ожидаемая страница для - support.domain.com) [GOOD]
  • https://www.domain.com/support перенаправляет https://www.domain.com/support/ (ожидаемой страницы support.domain.com) [хороших]

Токовых жить .htaccess правил являются:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.domain.com/$1 [L,NE,R=301] 
# End Enforce https 

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
# 
#Domain re-direction 
RewriteCond %{HTTP_HOST} ^domainnet\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.domainnet\.com$ 
RewriteRule ^/?$ https\:\/\/www\.domain\.com [L,NE,R=301] 
# 
#Support page re-direction 
RewriteRule ^justsupport/?$ https\:\/\/www\.domain\.com\/forsupport\/ [L,NE,R=301] 
</ifModule> 

Решением

Я использовал решение было предложен @ анубхав. Я модифицировал это решение, так как он отлично не работал для http://support.domain.com. Ниже приведено полное обновленное решение и скрипт, который теперь работает.

RewriteOptions inherit 
# Enforce https 
# “IfModule” is not used as we want web-server to give error if “mod_rewrite.c” missing 
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} !^(/?support/?)$ [NC] 
RewriteCond %{HTTP_HOST} !^(support\.domain\.com)$ [NC] 
RewriteRule ^(.*)/?$ https://www.domain.com/$1 [L,NE,R=301] 
# End Enforce https 

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
# 
#Domain re-direction 
RewriteCond %{HTTP_HOST} ^(www\.)?domainnet\.com$ [NC] 
RewriteRule^https://www.domain.com%{REQUEST_URI} [L,NE,R=301] 
#end domain re-direction 

#Support page 
#RewriteCond %{HTTPS} off 
RewriteCond %{SERVER_PORT} !443 
RewriteCond %{HTTP_HOST} ^support\.domain\.com$ [NC] 
RewriteRule^https://support.domain.com%{REQUEST_URI} [L,NE,R=301] 

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC] 
RewriteRule ^support/?$ https://support.domain.com/ [L,NC,NE,R=301] 
#end Support page 

#web support page re-direction 
RewriteRule ^justsupport/?$ https://www.domain.com/forsupport/ [L,NE,NC,R=301] 
#end web support page re-direction 
</ifModule> 

Результат

Ниже доказательства того, что модифицированное решение работает по желанию.

  • http://support.domain.com Теперь перенаправляет к https://support.domain.com [ХОРОШО]
  • https://support.domain.com является https://support.domain.com, как и ожидалось [ХОРОШО]
  • https://domain.com/support Теперь перенаправляет к https://support.domain.com [ХОРОШО]
  • http://domain.com/support Теперь перенаправляет к https://support.domain.com [ХОРОШО]
  • https://www.domain.com/support теперь перенаправляется на https://support.domain.com [GOOD]
  • http://www.domain.com/support Теперь перенаправляет https://support.domain.com [ХОРОШО]

ответ

0

Имейте это так:

RewriteOptions inherit 
# Enforce https 
# “IfModule” is not used as we want web-server to give error if “mod_rewrite.c” missing 
RewriteEngine On 

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} !^(/?support/?)$ [NC] 
RewriteCond %{HTTP_HOST} !^(support\.domain\.com)$ [NC] 
RewriteRule ^(.*)/?$ https://www.domain.com/$1 [L,NE,R=301] 
# End Enforce https 

#Domain re-direction 
RewriteCond %{HTTP_HOST} ^(www\.)?domainnet\.com$ [NC] 
RewriteRule^https://www.domain.com%{REQUEST_URI} [L,NE,R=301] 
#end domain re-direction 

#Support page 
#RewriteCond %{HTTPS} off 
RewriteCond %{SERVER_PORT} !443 
RewriteCond %{HTTP_HOST} ^support\.domain\.com$ [NC] 
RewriteRule^https://support.domain.com%{REQUEST_URI} [L,NE,R=301] 

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC] 
RewriteRule ^support/?$ https://support.domain.com/ [L,NC,NE,R=301] 
#end Support page 

#web support page re-direction 
RewriteRule ^justsupport/?$ https://www.domain.com/forsupport/ [L,NE,NC,R=301] 
#end web support page re-direction 
+0

Привет @anubhava ... спасибо за ответ дал бы ваш сценарий попробовать ... – Sysuser

+1

Hi @anubhava. Ваше решение изначально не работало отлично. Он был слегка изменен, чтобы заставить его работать на мой случай использования. Модификация теперь работает. – Sysuser

+0

Имеет ли значение, если мы обновим ваш собственный скрипт с модифицированной версией (помещенной в «Решение» в исходный вопрос). Или лучше просто оставить его так, как есть ... – Sysuser

Смежные вопросы