Вопрос.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
[ХОРОШО]
Привет @anubhava ... спасибо за ответ дал бы ваш сценарий попробовать ... – Sysuser
Hi @anubhava. Ваше решение изначально не работало отлично. Он был слегка изменен, чтобы заставить его работать на мой случай использования. Модификация теперь работает. – Sysuser
Имеет ли значение, если мы обновим ваш собственный скрипт с модифицированной версией (помещенной в «Решение» в исходный вопрос). Или лучше просто оставить его так, как есть ... – Sysuser