#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
директивы) могут быть объединены в одно.