Поддомен не работает без www перед ним

Поддомен не работает без www перед ним

Раньше у меня был настроен поддомен в cpanel (sub.domain.com для перенаправления на domain.com/sub/), и сегодня я внезапно заметил, что он переписывает URL в браузере на www.domain.com/sub/ вместо того, чтобы просто оставить его как sub.domain.com. Я не был уверен, в чем проблема, но решил удалить свой поддомен и заново создать его в cpanel. Теперь я могу получить к нему доступ, только перейдя на www.sub.domain.com (sub.domain.com выдает ошибку «сервер не найден»).

EDIT: Проблема, похоже, связана с файлом .htaccess. После его удаления все вернулось на круги своя. Однако теперь у меня возникла новая проблема: как правильно настроить файл .htaccess. Изначально я подправил его, чтобы попытаться добиться следующего:

У меня есть три папки: live, staging и dev:

1) Запросы на domain.com или www.domain.com направляются на domain.com/live (и URL-адрес, который видит пользователь, всегда перезаписывается как www.domain.com).

2) Запросы на staging.domain.com и dev.domain.com или направлены на domain.com/staging и domain.com/dev соответственно, и пользователь видит staging.domain.com или dev.domain.com в браузере.

3) Любые поддомены в целом не перезаписываются браузером, когда я добавляю их в cPanel.

Мой текущий файл .htaccess отлично справляется с пунктом 1, но переписывает staging.domain.com на www.domain.com/staging и т. д.

RewriteCond %{HTTP_HOST} !^www\.domain\.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
RewriteRule ^$ /index.html

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.domain.com/$1/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/live/
RewriteRule ^(.*)$ /live/$1

решение1

Я подправил логику своего исходного кода и, похоже, получил жизнеспособное рабочее решение. Все проведенные мной тесты были успешными, если кто-то видит какие-либо недостатки в коде или как его можно оптимизировать, чтобы он соответствовал условиям, заданным в исходном вопросе, пожалуйста, дайте знать. У меня мало опыта работы с переписыванием. Спасибо.

Рабочий код:

# REDIRECTS
#
# Add www in front of all URLs except subdomains
#
RewriteCond %{HTTP_HOST} ^domain\.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
RewriteRule ^$ /index.html
#
# Add forward slash at end of www URLs
#
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.domain.com/$1/ [R=301,L]
#
# Forward requests to live folder
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/live/
RewriteRule ^(.*)$ /live/$1

*Примечание: Я не уверен, почему последняя часть кода не перенаправляет URL-адреса поддоменов в живую папку. Это работает так, как я хочу, просто не уверен, почему ^_^;

Связанный контент