Перенаправление на переписанный URL - PullRequest
0 голосов
/ 28 ноября 2011

ОК, поэтому я переписываю некоторые 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.

.

Эта часть работает нормально. Мне интересно, какие у меня есть варианты для другого направления; перенаправление запросов на старый адрес на новый адрес. Так, например, когда кто-то идет в /product.php?id=2, я хочу перенаправить в /products/2/slug.

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

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

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

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Я решил это по-другому: с изменением файла 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");
}
0 голосов
/ 28 ноября 2011

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

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

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

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

...