Вопрос

Хорошо, я переписываю URL-адреса некоторых страниц для пользовательской корзины PHP.

У меня есть следующие правила:

RewriteRule ^category/([0-9]+)/([a-z-]+)$ /store.php?cat=$1 [L]
RewriteRule ^product/([0-9]+)/([a-z-]+)$ /product.php?id=$1 [L]

Это позволит мне использовать структуру URL, например example.com/product/23/product-slug.

Эта часть работает нормально.Мне интересно, какие у меня есть варианты в другом направлении;перенаправление запросов со СТАРОГО URL-адреса на НОВЫЙ URL-адрес.Например, когда кто-то заходит на /product.php?id=2, я хочу перенаправить на /products/2/slug.

Есть идеи, как это сделать?

Я попробовал простое перенаправление, но оно не сработало:

Redirect 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug
Это было полезно?

Решение 2

Я решил это по-другому:с изменением файла store.php.

Я посмотрел вывод из print_r($_SERVER) после проверки связи как с обычными, так и с переписанными URL-адресами.я нашел это $_SERVER['SCRIPT_URL'] содержит «/store.php» при попадании по обычному URL-адресу и мой переписанный путь при попадании по переписанному URL-адресу.

Это означает, что я могу выполнить простой тест и соответствующим образом перенаправить:

if ($_SERVER['SCRIPT_URL'] == "/store.php") {
    // run some code that will generate the url
    $rewrittenURL = generateURL();
    // then add:
    header("HTTP/1.0 301 Moved Permanently"); // tell spiders this is permanent
    header("Location: $rewrittenURL");
}

Другие советы

Перенаправление принимает только префикс URL-адреса, а не регулярное выражение (например,/store.php или /store)

Вам нужно попробовать RedirectMatch:

RedirectMatch 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug

Кроме того, оно должно начинаться с /?Я не уверен (например, записи RewriteRule выше начинаются без косой черты)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top