Как перенаправить почти похожие ссылки?

#apache #.htaccess #redirect #mod-rewrite

Вопрос:

Мне нужно написать два перенаправления:

  1. От https://site.ru/dveri до https://anothersite.ru/dveri-iz-dereva/
  2. От https://site.ru/dveri?start=14 до https://anothersite.ru/blog/

Я написал два правила в htaccess:

#1

 RewriteCond %{THE_REQUEST} s/ dveri[?s/] [NC] RewriteRule ^ https://anothersite.ru/dveri-iz-dereva/ [L,R=301]  

#2

 RewriteCond %{THE_REQUEST} s/ dveri[?s/] [NC] RewriteRule ^.*$ https://anothersite.ru/blog/? [L,R=301]  

Результат:

ссылка https://site.ru/dveri правильно перенаправляется на https://anothersite.ru/dveri-iz-dereva/

ссылка https://site.ru/dveri?start=14 неправильно перенаправляется на https://anothersite.ru/dveri-iz-dereva/?start=14

Ответ №1:

Два правила, которые вы написали, одинаковы. Попробуйте это во второй раз

 RewriteCond %{THE_REQUEST} /dveri?start=14$ RewriteRule ^ https://anothersite.ru/blog/? [L,R=301]  

Ответ №2:

Мой опытный коллега помог мне в этом:

 RewriteCond %{THE_REQUEST} s/ dveri[?s/] [NC] RewriteCond %{QUERY_STRING} ^start=14$ RewriteRule ^.*$ https://anothersite.ru/blog/? [L,R=301]  RewriteCond %{THE_REQUEST} s/ dveri[?s/] [NC] RewriteRule ^ https://anothersite.ru/dveri-iz-dereva/ [L,R=301]  

Ответ №3:

 RewriteCond %{THE_REQUEST} s/ dveri[?s/] [NC] RewriteCond %{QUERY_STRING} ^start=14$ RewriteRule ^.*$ https://anothersite.ru/blog/? [L,R=301]  RewriteCond %{THE_REQUEST} s/ dveri[?s/] [NC] RewriteRule ^ https://anothersite.ru/dveri-iz-dereva/ [L,R=301]  

Если эти директивы размещены в верхней части корневого .htaccess файла, то их можно упростить до:

 RewriteCond %{QUERY_STRING} ^start=14$ RewriteRule ^dveri/?$ https://anothersite.ru/blog/ [NC,QSD,R=301,L]  RewriteRule ^dveri/?$ https://anothersite.ru/dveri-iz-dereva/ [NC,R=301,L]