У меня в моем .htaccess
файл:
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Он работает в браузере должным образом, перенаправляя весь трафик на https://www.example.com/
.
Но я использую POS-систему, которая автоматически загружает продукты на веб-сайт, и, по-видимому, этому настольному приложению не нравится больше одного RewriteRule
. Он жалуется, что его интернет-магазин не установлен. Как только я удаляю одно из правил, он становится счастливым.
Итак, мой вопрос: есть ли способ объединить это в один RewriteRule
?
... не любит больше одного
RewriteRule
.
Это необычное требование. Вероятно, он жалуется на множественные перенаправляет при запросе http://example.com
, а не буквально количество RewriteRule
директивы?
Эту проблему можно решить, убедившись, что вы перенаправляете на канонический URL-адрес в первом RewriteRule
директива. Итак, вместо:
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Вы бы написали:
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]
Или, чтобы сохранить это «общее», без явного включения имени домена в RewriteRule
попробуйте следующее:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
RewriteRule
Затем вы можете расширить приведенное выше, чтобы создать один RewriteRule
для канонизации как HTTPS, так и www. Попробуйте следующее:
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
Для всех запросов HTTP или не начинайте www
затем перенаправьте на канонический URL. Третий RewriteCond
требуется директива для захвата домена (за исключением необязательного www.
префикс) от хоста. В %1
это обратная ссылка на последний найденный CondPattern т.е. (.+)
. Если вы просто жестко запрограммировали каноническое имя хоста в RewriteRule
замена тогда вам не понадобится это третье условие.