mod_rewrite старые URL с параметрами для новых URL, но используя старые параметры с новым URL - PullRequest
1 голос
/ 21 июля 2011

У меня сложная ситуация перезаписи, когда мне нужно переписать старые URL-адреса, имеющие параметры, в новые URL-адреса, но в то же время добавить параметры старого (теперь недействительного) URL-адреса в этот новый URL-адрес.

Пример: старая ссылка на ring-details.php? Product = MQ == & hash = 376FGE367ER872CBD5 теперь станет ring / ring-detail / 23 .htm, где число 23 на самом деле является base64_decoded значением указанного выше URL продукта.

Итак, по сути, мне нужно сделать это:

  • Проверьте, является ли запрашиваемая страница ring-details.php и что присутствует параметр «товар». Хеш больше не используется.

  • Возьмите значение параметров продукта (MQ ==), base64_decode его

  • Добавьте расшифрованное значение к новому URL-адресу: rings / ring-detail / $ 1.htm где $ 1 - это параметр URL декодированного продукта.

Я не прошу, чтобы меня кормили ложкой, но любые советы или хорошие ресурсы были бы хороши. Спасибо,

1 Ответ

1 голос
/ 21 июля 2011

Насколько я знаю, вы не можете декодировать Base64 в .htaccess / mod_rewrite.Но вы можете сделать обходной путь через PHP.

Так что вам нужно перехватить старый URL и переписать его в файл PHP, который декодирует Base64 и перенаправляет на новый URL.

Содержимое .htaccess:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^product=([^&]+)
RewriteRule ring-details\.php$ redirect.php?product=%1 [L]

Содержимое redirect.php:

<?php
header('Location: http://'.$_SERVER['HTTP_HOST'].'/rings/ring-detail/'.intval(base64_decode($_GET['product'])).'.htm', true, 301);
?>

Но на самом деле вы можете изменить ring-details.php и добавить этот код в самом верху:

<?php
if(!empty($_GET['product'])){
    header('Location: http://'.$_SERVER['HTTP_HOST'].'/rings/ring-detail/'.intval(base64_decode($_GET['product'])).'.htm', true, 301);
    exit;
}
?>
...