Перенаправление на переписанный URL-адрес
-
22-10-2019 - |
Вопрос
Хорошо, я переписываю 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 выше начинаются без косой черты)