Как перенаправить / перезаписать домен-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

2
задан 12 April 2019 в 23:45
1 ответ
 RewriteRule ^ dir1 \ / dir2 (. *) $ Https://domain-2.org/$1 [L, R = 301]
 

Если у вас есть RewriteEngine On , в обоих случаях ваши две «попытки» действительно одинаковы . RewriteBase здесь не имеет значения.

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

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

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

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-е файлы постоянно кэшируются браузером, поэтому тестирование может быть проблематичным.

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

2
ответ дан 3 December 2019 в 11:23

Теги

Похожие вопросы