Ваши текущие перенаправления не верны, поэтому они должны быть исправлены. (Хотя вы бы видели какой-то редирект.)
RewriteCond %{HTTP_HOST} ^oldsub\. [NC]
RewriteCond %{HTTP_HOST} ^(?:oldsub\.)?(.+)$ [NC]
RewriteRule ^ https://blog.%1%{REQUEST_URI} [L,NE,R=301]
RewriteCond %{HTTP_HOST} ^oldsub\.gppcpa\.com$ [NC]
RewriteRule ^ https://maindomain.com/specific-url-title/ [L,NE,R=301]
Проблемы с этими директивами:
Первое правило не перенаправляет в подкаталог /blog
.
Эти правила противоречат друг другу. Первое правило также перенаправит корень документа субдомена. Следовательно, второе правило никогда не будет обработано.
Поскольку рассматриваемый поддомен находится полностью за пределами вашего основного домена, с точки зрения того, где эти имена хостов указывают в вашей файловой системе, нет необходимости проверять имя хоста в этих директивах, поскольку только поддомен oldsub
может получить доступ к этой области. .
Попробуйте вместо этого:
RewriteRule . https://blog.maindomain.com/blog%{REQUEST_URI} [R=302,L]
RewriteRule ^ https://maindomain.com/specific-url-title/ [R=302,L]
Одиночная точка в первом шаблоне RewriteRule
соответствует «чему-то» (а не «ничему»). Когда URL-путь пуст (т. Е. Корень документа), это переходит ко второй директиве.
Убедитесь, что вы очистили кеш браузера перед тестированием.
Тест с 302 (временными) перенаправлениями и только 301 (постоянный), если вы уверены, что он работает нормально. Это сделано для того, чтобы избежать каких-либо проблем с кэшированием, поскольку браузер постоянно кэширует 301 (включая ошибочные).
RewriteCond %{HTTP_HOST}
RedirectMatch 301 ^/blog/(.*)$ https://blog.maindomain.com/blog/$1
Из вашего файла домена maindomain .htaccess
... Эта директива RewriteCond
здесь ошибочна и должна быть удалена.
Чтобы избежать потенциальных конфликтов с mod_rewrite, вы должны изменить директиву mod_alias RedirectMatch
на mod_rewrite. Например:
RewriteEngine On
RewriteRule ^blog/(.*) https://blog.maindomain.com/blog/$1 [R=302,L]
Различные модули Apache (mod_rewrite, mod_alias и т. Д.) Выполняются в разное время на протяжении всего запроса и работают независимо друг от друга. mod_rewrite обычно запускается первым (независимо от видимого порядка директив в вашем файле конфигурации), но это также означает, что mod_alias (Redirect
, RedirectMatch
) всегда будет работать, даже если более ранняя директива mod_rewrite (RewriteRule
) могла бы переписал URL и остановил выполнение.