У меня есть ситуация, когда мне нужно заставить каждую страницу моего сайта перенаправлять на HTTP, за исключением двух конкретных URL-адресов, которые должны принудительно перенаправлять на HTTPS.
Две страницы, которые необходимо перенаправить на HTTPS-страницы:
/ microsoft-moc-on-demand-video-training / moc-registration-page /
/ курсы / зарегистрироваться /
Код, который я использовал в своем файле .htaccess, выглядит так:
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/courses/register/
RewriteCond %{REQUEST_URI} !^/microsoft-moc-on-demand-video-training/moc-registration-page/
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(/courses/register/|/microsoft-moc-on-demand-video-training/moc-registration-page/)/ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
К сожалению, это не работает. Весь сайт перенаправляет на HTTP (поэтому часть кода работает), но эти два исключения (которые должны перенаправлять на HTTPS) этого не делают, они остаются ссылками HTTP.
Есть идеи, что я здесь делаю не так?
Когда вы используете RewriteRule в .htaccess, он использует контекст для каждого каталога (относительный), что означает, что шаблон значение должно не включить косую черту в начале. Ваш шаблон также включает в себя лишнюю косую черту в конце, что вызовет проблемы. Попробуйте следующее, чтобы исправить эти два элемента:
RewriteRule ^(courses/register/|microsoft-moc-on-demand-video-training/moc-registration-page/) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]