0

好的,所以我正在为自定义 PHP 购物车重写一些页面 URL。

我有以下规则:

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

这些将允许我使用像 example.com/product/23/product-slug 这样的 url 结构。

那部分工作正常。我想知道我对另一个方向有什么选择;将对 OLD url 的请求重定向到 NEW url。例如,当有人访问 /product.php?id=2 时,我想重定向到 /products/2/slug。

知道如何完成这项工作吗?

我尝试了一个简单的重定向,但不起作用:

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

2 回答 2

0

我以不同的方式解决了这个问题:修改了 store.php 文件。

print_r($_SERVER)在对正常和重写的 url 进行 ping 操作后,我查看了输出。我发现$_SERVER['SCRIPT_URL']当正常 url 被命中时包含“/store.php”,当重写 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");
}
于 2011-11-28T20:31:26.423 回答
0

重定向只需要一个 url 前缀,而不是一个正则表达式(例如 /store.php 或 /store)

您需要尝试 RedirectMatch:

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

另外,它应该以/开头吗?我不确定(例如,您上面的 RewriteRule 条目不以斜线开头)

于 2011-11-28T18:13:05.090 回答