У меня есть веб-сайт, использующий PHP -система CMS.
Каждая страница генерируется динамически, например:
http://www.shuling.net.cn/index.php?_m=mod_product&_a=view&p_id=87
Теперь я хочу перенаправить эту конкретную страницу на другую страницу, например:
Итак, я пишу файл .htaccess следующим образом:
redirect 301 /index.php?_m=mod_product&_a=view&p_id=87 https://www.datanumen.com/sql-recovery/
Но после того, как я загружаю .htaccess в корневой каталог веб-сайта, это вообще не работает.
Я повторно тестирую, записывая другое правило, например:
redirect 301 /sql/ https://www.datanumen.com/sql-recovery/
Тогда это правило будет работать идеально.
Почему?
Спасибо
Строка запроса не является частью соответствия в директиве Redirect, для перенаправления строк запроса вам необходимо использовать мод-перезапись следующим образом:
вариант 1
RewriteEngine on
RewriteCond %{THE_REQUEST} /index\.php\?_m=mod_product&_a=view&p_id=87 [NC]
RewriteRule ^ https://www.datanumen.com/sql-recovery/? [NC,L,R]
вариант 2
RewriteEngine on
RewriteCond %{QUERY_STRING} ^_m=mod_product&_a=view&p_id=87$ [NC]
RewriteRule ^index\.php$ https://www.datanumen.com/sql-recovery/? [NC,L,R]
Мы используем пустой вопросительный знак ? в конце целевого URL, чтобы отбросить старые строки запроса, в противном случае эти строки запроса будут добавлены к целевому URL по умолчанию.
Измените R на R = 301 , если вы хотите сделать перенаправление постоянным.
[Проверено на apache2 и 2.4]