Я не силен в .htaccess и по этому мне нужна ваша помощь. Недавно я приобрел подстановочный SSL-сертификат, и смена http на https не работает должным образом. Сайт построен на CakePHP 2.3 и каталог public_html
имеет следующую структуру:
/app
/lib
/plugins
/Cake
/sub1.domain.com
- app
- lib
- plugins
- ...
/sub2.domain.com
- app
- lib
- plugins
- ...
Так мой хостинг обрабатывает поддомены. Папка Cake
— это общее ядро CakePHP для всех поддоменов + основной домен.
При установке SSL в cPanel автоматически добавилась запись *.domain.com -> /public_html
, которую я не могу изменить.
Все работает нормально, когда я использую http, но https перенаправляет все мои поддомены на основной домен. .htaccess в /public_html
выглядит так:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# http|https www to non-www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^(.*)$ http%1://domain.com/$1 [R=301,L]
# redirect all subdomains
RewriteCond %{HTTP_HOST} !^domain\.(.*)$ [NC]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ /%{HTTP_HOST}/$1 [NC,L,NS]
RewriteCond %{HTTP_HOST} ^domain\.(.*)$ [NC]
RewriteRule ^$ app/webroot/ [L]
RewriteCond %{HTTP_HOST} ^domain\.(.*)$ [NC]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
Все файлы .htaccess в поддоменах являются файлами CakePHP по умолчанию с RewriteBase /
Была ли у кого-то похожая ситуация и как вы ее решили? Пожалуйста, помогите, так как это действительно за пределами моего знания.
Обновление №4
/public_html/sub1.domain.com/.htaccess
is:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} =on
RewriteRule ^$ sub1.domain.com/app/webroot/ [L]
RewriteCond %{HTTPS} =on
RewriteRule (.*) sub1.domain.com/app/webroot/$1 [L]
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
Все выглядит нормально, только https://sub1.domain.com перенаправляет на https://sub1.domain.com/sub1.domain.com, и все сгенерированные пути включают /sub1.domain.com
Как удалить папку sub1.domain.com из URL и из ссылок?
Должен ли я обновить Configure::write('App.baseUrl', env('SCRIPT_NAME'));
на что-то еще? Все еще пытаюсь это исправить