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

Как перенаправить / переписать домен-1 / dir1 / dir2 / * на другой домен-2 / dir1 / dir2 / * в htaccess?

Я пытаюсь перенаправить все URL-адреса из одного каталога в одном домене в тот же каталог в другой домен на том же сервере и не могу заставить его работать. Как мне решить эту проблему?

Я пытался:

Попытка 1

RewriteBase /
RewriteRule ^dir1\/dir2(.*)$ https://domain-2.org/$1 [L,R=301] 

Попытка 2

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^dir1/dir2(.*)$ https://domain-2.org/$1 [L,R=301]
</IfModule>

Желаемый результат:

Я надеюсь перенаправить все URL-адреса, подобные этим шаблонам:

www.domain-1.org/dir1/dir2/url-1
www.domain-1.org/dir1/dir2/url-2
www.domain-1.org/dir1/dir2/url-N

https://domain-1.org/dir1/dir2/url-1
https://domain-1.org/dir1/dir2/url-2
https://domain-1.org/dir1/dir2/url-N

http://domain-1.org/dir1/dir2/url-1
http://domain-1.org/dir1/dir2/url-2
http://domain-1.org/dir1/dir2/url-N

https://www.domain-1.org/dir1/dir2/url-1
https://www.domain-1.org/dir1/dir2/url-2
https://www.domain-1.org/dir1/dir2/url-N

http://www.domain-1.org/dir1/dir2/url-1
http://www.domain-1.org/dir1/dir2/url-2
http://www.domain-1.org/dir1/dir2/url-N

кому:

https://domain-2.org/dir1/dir2/url-1
https://domain-2.org/dir1/dir2/url-2
https://domain-2.org/dir1/dir2/url-N

RegEx:

https://regex101.com/r/2BD1kB/1

RewriteRule ^dir1\/dir2(.*)$ https://domain-2.org/$1 [L,R=301]

Предполагая, что у вас есть RewriteEngine On в обоих случаях ваши две "попытки" действительно тот же самый. RewriteBase здесь не имеет значения.

В $1 обратная ссылка относится к захваченной группе в RewriteRule шаблон, т.е. (.*) - все после /dir1/dir2 - так что это не будет перенаправлять в «тот же каталог» в другом домене.

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

Вместо этого попробуйте следующее:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?domain-1\.org [NC]
RewriteRule ^dir1/dir2/.* https://domain-2.org/$0 [R=302,L]

$0 - это обратная ссылка на весь URL-путь, который соответствует RewriteRule шаблон. например. dir1/dir2/url-N.

Обратите внимание, что это 302 (временное) перенаправление. Протестируйте с 302 и переходите на 301 (постоянный) редирект, только когда вы подтвердите, что это работает нормально. 301-файлы постоянно кэшируются браузером, поэтому тестирование может быть проблематичным.

Перед тестированием вам необходимо очистить кеш браузера.