В настоящее время у меня есть сайт, на котором я использую .htaccess для включения https для определенных разделов сайта:
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (evaluate/purchase*)
RewriteRule (.*) https://mydomain.com%{REQUEST_URI}
В папке «оценка» находится несколько файлов, имя которых начинается с слова «покупка», и все они должны быть защищены. Пока это работает.
Теперь мне нужно защитить несколько других файлов и каталогов, однако добавление их в качестве условия перезаписи, похоже, не работает:
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (evaluate/purchase*)
RewriteCond %{REQUEST_URI} (another_dir/file.php)
RewriteCond %{REQUEST_URI} (please_secure_me.php)
RewriteRule (.*) https://mydomain.com%{REQUEST_URI}
Это не поднимает никаких 500 или что-то в этом роде, это просто защитит файлы только при первом условии. Что я делаю не так?
На самом деле, просто просматривая документы 2.2, вы можете сделать следующее:
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (evaluate/purchase*) [OR]
RewriteCond %{REQUEST_URI} (another_dir/file.php) [OR]
RewriteCond %{REQUEST_URI} (please_secure_me.php)
RewriteRule (.*) https://mydomain.com%{REQUEST_URI}
Если это сработает, это гораздо более элегантное решение.
IIRC, RewriteCond - это условие И.
«Если все условия совпадают, обработка продолжается с заменой строки подстановки на URL».
В данный момент вы говорите (HTTPS выключен, И URI - это И URI - это И URI - это), что неверно, поскольку URI не может быть 3 разными вещами одновременно!
Вам нужно комбинированное условие И / ИЛИ (HTTPS выключено И (URI это ИЛИ URI это ИЛИ URI это))
Попробуйте продублировать свое правило:
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (evaluate/purchase*)
RewriteRule (.*) https://mydomain.com%{REQUEST_URI}
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (another_dir/file.php)
RewriteRule (.*) https://mydomain.com%{REQUEST_URI}
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (please_secure_me.php)
RewriteRule (.*) https://mydomain.com%{REQUEST_URI}