htaccess удалить сегмент из URL и перенаправить на https и www

Я развертываю сайт Craft CMS на учетной записи общего хостинга с помощью Deployer.

Последнее развертывание доступно по адресу domain.com/current/public.

Мой файл .htaccess выглядит следующим образом, который отделяет текущий/общедоступный от URL-адреса и принудительно использует https:

RewriteEngine on
RewriteRule ^(.*)$ current/public/$1
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

Теперь мне нужно также перенаправить все URL-адреса на использование www

Как я могу настроить свой .htaccess, чтобы использовать www на всех URL-адресах?

*** ОБНОВИТЬ ***

Мне удалось решить вышеизложенное следующим образом:

RewriteEngine on
RewriteRule ^(.*)$ current/public/$1
RewriteCond %{HTTP:X-Forwarded-Proto} !=https [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+) [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

Когда я захожу на example.com/admin, меня перенаправляет на example.com/current/public/admin. Как я могу настроить свой файл htaccess, чтобы удалить «текущий / общедоступный» из URL-адресов администратора?


person Pedro    schedule 06.07.2020    source источник


Ответы (1)


Ваше правило добавления http->https и www должно быть первым правилом, чтобы оно работало с исходным URI, а не с переписанным URI из-за другого правила.

RewriteEngine on

RewriteCond %{HTTP:X-Forwarded-Proto} !=https [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+) [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]

RewriteRule ^(.*)$ current/public/$1 [L]

Обязательно очистите кеш браузера перед тестированием этого правила.

Также добавьте это правило перенаправления в /current/public/.htaccess:

RewriteCond %{THE_REQUEST} /current/public/(\S+) [NC]
RewriteRule ^ /%1 [R=301,L,NE]
person anubhava    schedule 06.07.2020
comment
Спасибо за ответ. Я проверил ваше правило, и оно отлично работает для общедоступных URL-адресов, но при доступе к разделу /admin текущий/общедоступный сегмент по-прежнему не удаляется. - person Pedro; 06.07.2020
comment
Да, а также пробовал в других браузерах и компьютерах - person Pedro; 07.07.2020
comment
/admin — это редирект 302. Страница, которая загружается со статусом 200, называется /current/public/admin/login. Потенциально встроенная переадресация с админкой Craft CMS? - person Pedro; 07.07.2020
comment
Давайте продолжим обсуждение в чате. - person Pedro; 07.07.2020