301 перенаправление htaccess с 3 параметрами на статические URL-адреса

#.htaccess #redirect #http-status-code-301

Вопрос:

Я пытаюсь перенаправить несколько URL-адресов с 3 параметрами на разные статические URL-адреса с помощью .htaccess, но ничего не работает.

1.

 http://olddomain.com/index.php?id_category=28amp;controller=categoryamp;id_lang=2
 

Для

 https://newdomain.com/page1/
 
 http://olddomain.com/index.php?id_category=30amp;controller=categoryamp;id_lang=2
 

Для

 https://newdomain.com/page2/
 
 http://olddomain.com/index.php
 

Для

 https://newdomain.com
 

Я попробовал приведенный ниже код, но http://olddomain.com/index.php не собираюсь https://newdomain.com :

 RewriteCond %{HTTP_HOST} ^olddomain.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC]
RewriteRule ^(.*)$ https://newdomain.com/$1 [L,R=301,NC] 

RewriteCond %{QUERY_STRING} ^id_category=28amp;controller=categoryamp;id_lang=2$
RewriteRule ^index.php$ https://newdomain.com/page1/? [R=301,L]

RewriteCond %{QUERY_STRING} ^id_category=30amp;controller=categoryamp;id_lang=2$
RewriteRule ^index.php$ https://newdomain.com/page2/? [R=301,L]
 

Комментарии:

1. Добро пожаловать в SO, спасибо, что поделились своим кодом. Как вы передаете значение категории для перезаписи URL-адреса index.php досье? Будьте добры, поподробнее об этом.

Ответ №1:

Сначала вам нужно иметь определенные более длинные совпадения, а затем правила для удаления index.php или перенаправления домена:

 RewriteEngine On

# specific redirects with index.php as optional match
RewriteCond %{QUERY_STRING} ^id_category=28amp;controller=categoryamp;id_lang=2$ [NC]
RewriteRule ^(index.php)?$ https://newdomain.com/page1/? [R=301,L,NC]

RewriteCond %{QUERY_STRING} ^id_category=30amp;controller=categoryamp;id_lang=2$ [NC]
RewriteRule ^(index.php)?$ https://newdomain.com/page2/? [R=301,L,NC]

# remove index.php and redirect to newdmain
RewriteCond %{HTTP_HOST} ^(?:www.)?olddomain.com$ [NC]
RewriteRule ^(?:index.php/?)?(.*)$ https://newdomain.com/$1 [L,R=301,NC,NE]
 

Обязательно очистите кэш браузера перед тестированием этого изменения.

Ответ №2:

В случае, если вы берете идентификатор страницы из переменной id_lang= , пожалуйста, попробуйте следовать правилам. Пожалуйста, не забудьте очистить кэш вашего браузера перед тестированием ваших URL-адресов.

 RewriteEngine ON
##Rules to redirect to link: https://newdomain.com/page1/ here.
RewriteCond %{HTTP_HOST} ^(?:www.)?olddomain.com$ [NC]
RewriteCond %{THE_REQUEST} s/index.php?id_category=28amp;controller=categoryamp;id_lang=(d )s [NC]
RewriteRule ^ https://newdomain.com/page%1/? [NE,R=301,L]

##Rules to redirect https://newdomain.com/ here.
RewriteCond %{HTTP_HOST} ^(?:www.)?olddomain.com$ [NC]
RewriteCond %{THE_REQUEST} s/index.phps [NC]
RewriteRule ^ https://newdomain.com [NE,R=301,L]
 

Комментарии:

1. хорошо, приведенный ниже код работает и перенаправляет категории на новые страницы. но не могу перенаправить первую страницу olddomain.com чтобы newdomain.com и olddomain.com/index.php чтобы newdomain.com Перезапись секунды %{СТРОКА ЗАПРОСА} ^id_category=28amp;контроллер=категорияamp;id_lang=2$ Перезапись ^index.php$ newdomain.com/page1 ? [R=301,L] Перезапись %{СТРОКА ЗАПРОСА} ^id_category=30 и контроллер=категория и id_lang=2$ Перезапись ^index.php$ newdomain.com/page2 ? [R=301,L]

2. @Крис, не могли бы вы, пожалуйста, дать мне знать, сработало ли мое решение для вас? Спасибо.

3. На самом деле это правило не может основываться на id_lang= параметре, потому что 2 в обоих случаях оно соответствует OP.