Назад | Перейти на главную страницу

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

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

РЕДАКТИРОВАТЬ: проблема, похоже, связана с файлом .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

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

Рабочий код:

# 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-адреса субдоменов в действующую папку. Он работает так, как я хочу, только не знаю почему ^ _ ^;