Как перенаправить весь трафик на новый домен, кроме домашней страницы

#apache #.htaccess #redirect #mod-rewrite

Вопрос:

Поэтому я пытаюсь перенаправить трафик, который переходит на другие страницы с помощью htaccess, с домена на новый поддомен, но я бы хотел сохранить трафик на домашней странице там.

 RewriteEngine On  RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR] RewriteCond %{HTTP_HOST} ^www.olddomain.com$  RewriteRule ^/?$ "http://newsubdomain.domain.com/" [R=301,L]   

Это просто перенаправляет все на новый поддомен. Вот где я хотел бы получить некоторую помощь, как я могу сохранить трафик, поступающий на домашнюю страницу, на olddmain.com и перенаправляйте запросы на olddomain/post, чтобы они отправлялись на newsubdomain.domain.com/post

Спасибо

Ответ №1:

Это просто перенаправляет все на новый поддомен.

Нет, это не так. (Если все перенаправляется, то либо это делает что-то другое, либо вы видите кэшированное перенаправление.)

Опубликованные директивы на самом деле делают прямо противоположное тому, что вы пытаетесь сделать. Эти директивы перенаправляют только домашнюю страницу (т. е. запросы на корневой каталог документа).

Чтобы перенаправить все, кроме главной страницы, вы можете сделать что-то вроде следующего в верхней части .htaccess файла:

 # Redirect everything except the homepage RewriteCond %{HTTP_HOST} ^(www.)?olddomain.com [NC] RewriteRule !^$ https://newsubdomain.domain.com%{REQUEST_URI} [R=301,L]  

RewriteRule Шаблон !^$ соответствует всему, кроме корня (пустой URL-путь).

Вам нужно будет очистить кэш браузера перед тестированием.

Сначала протестируйте 302 (временных) перенаправления, чтобы избежать потенциальных проблем с кэшированием.

Дополнительные примечания:

  • Нет необходимости использовать обратную косую черту-экранировать двоеточия, косые черты и точки в строке RewriteRule подстановки (2 — й аргумент) — это «обычная» строка, а не регулярное выражение. (Это ненужное бегство довольно типично для попытки использовать поколение «перенаправления» cPanel.)
  • Я предполагаю, что это должен быть HTTPS, а не HTTP?
  • Два условия ( RewriteCond директивы) могут быть объединены в одно.