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