#.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.