Как сделать правильно 301 редирект?

Привет всем! Ребята подскажите как правильно сделать 301 редирект такого вида в htassecc? Чпу работает так как надо а вот редирект не в какую не хочет работать.

Старый адрес https://test.ru/parts/part.php?id=18427
Новый адрес https://test.ru/parts/18427

Делаю вот так и не получается!

RewriteEngine On
RewriteRule ^parts/([^/]*)$ /parts/part.php?id=$1 [L]
RewriteCond %{THE_REQUEST} " /parts/part\.php\?id=([^&]+)"
RewriteRule ^ https://test.ru/%1/%2/? [R=301,L,NE]


Заранее признателен за правильный ответ!
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
orlov0562
@orlov0562
I'm cool!
1) тебе надо, убрать пробел после первой кавычки в регулярке " /parts/part\.php\?id=([^&]+)"
2) у тебя только один "карман" т.е. в %2 будет пусто
3) у тебя в id=([^&]+) захватится протокол передачи, будет что-то типа "123 HTTP/1.1", т.е. надо добавить внутрь пробел

я рекомендую тебе сделать вот так
RewriteCond %{THE_REQUEST} "/parts/part\.php\?id=([^& ]+)"
RewriteRule . test.php?test=%1


а в test.php
<?php

print_r($_REQUEST);


отладить параметры которые ты получаешь регуляркой, а затем уже делать редирект

P.S. посмотреть что там вообще передается в %{THE_REQUEST} и в каком формате, можно вот так:
RewriteCond %{THE_REQUEST} "^(.+)$"
RewriteRule . test.php?test=%1
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ShamblerR
1. GET не является частью урла и выделяется отдельно, мало тогопоскольку отдельно то и вместо $1 используются %1 посколку данные берутся с COND
2. собери тут
https://donatstudios.com/RewriteRule_Generator
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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