#.htaccess
#.htaccess
Вопрос:
Вот что я пытаюсь сделать. У меня есть несколько сценариев на сайте, в которых я переписываю URL-адреса, чтобы заставить их использовать https: // . Что я затем хочу сделать, это переписать URL-адреса при переходе со страниц HTTPS обратно на HTTP. Вот что у меня есть сейчас, что работает не совсем так, как мне бы хотелось.
# For HTTPS pages:
RewriteCond %{HTTPS} off
RewriteRule ^(register/|cms/(.*))$ https://%{HTTP_HOST}/$1 [R=301,L]
# For non-HTTPS pages:
RewriteCond %{HTTPS} on
RewriteRule ^(about/|contact/)$ http://%{HTTP_HOST}/$1 [R=301,L]
Проблема, с которой я сталкиваюсь, заключается в том, что, хотя страницы типа about / и contact / перезаписываются обратно на HTTP, я не могу понять, как ссылаться на корень документа, поэтому, к сожалению, он остается https: // . Мне нравится использовать относительные URL-адреса, поэтому я бы предпочел не заходить в свой исходный код и не менять все на абсолютный, если есть простое решение htaccess.
Мой вопрос: Как мне правильно ссылаться на веб-корень в моем RewriteRule?
Кроме того, есть ли более эффективный универсальный способ сделать то, что я пытаюсь выполнить, о котором я просто не знаю, потому что я не смог найти никого другого с этой проблемой. Я не очень хорошо знаком с .htaccess. Я узнаю достаточно по мере выполнения различных операций перезаписи, поскольку мне никогда не понадобятся полные функции, и я нахожу документацию громоздкой и трудной для понимания.
Спасибо!
Ответ №1:
для сопоставления root используйте
RewriteCond %{HTTPS} on
RewriteRule ^$ http://%{HTTP_HOST}/$1 [R=301,L]
или объединить их с другим правилом
RewriteRule ^(about/|contact/|)$ http://%{HTTP_HOST}/$1 [R=301,L]
Что касается улова, все ожидают / register и / cms (это то, что вы имеете в виду, верно?). Я думаю, это должно сработать.
# For HTTPS pages:
RewriteCond %{HTTPS} off
RewriteRule ^(register/|cms/(.*))$ https://%{HTTP_HOST}/$1 [R=301,L]
#prevent rules beneath this one in this htaccess file from being applied when url start with register of cms (doesn't do anything else)
RewriteRule ^(register/|cms/) - [L]
#don't force http for resources, to prevent partial encryption errors
RewriteRule ^(css/|images/) - [L]
# For non-HTTPS pages:
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
Комментарии:
1. Вау, я действительно должен был знать, что оставление ссылки пустой будет ссылкой на корень. Спасибо за это. К сожалению, простое добавление этой пустой ссылки в root приводит к тому, что моя страница регистрации зашифровывается только частично (что для тех, кто использует Firefox, выглядит так, как будто она вообще не зашифрована). Я предполагаю, что это потому, что у меня есть ссылки на изображения и другие связанные элементы, которые начинаются с корневого каталога в HTML-разметке моей страницы регистрации? Ну, перезапись работает на каждой странице, кроме корня, поэтому я просто использую абсолютную ссылку там и избавлю себя от проблем
2. Я отредактировал сообщение, чтобы не использовать http (вместо https) в определенных каталогах (css и изображения в этом примере).
3. Блестяще! У меня это работает именно так, как я хотел, чтобы это было сейчас. Спасибо!