重定向到重写的URL

时间:2011-11-28 18:06:31

标签: php mod-rewrite mod-alias

好的,我正在为自定义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。

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

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

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

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

2 个答案:

答案 0 :(得分:0)

重定向只接受网址前缀,而不是正则表达式(例如/store.php或/ store)

您需要尝试RedirectMatch:

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

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

答案 1 :(得分:0)

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

在ping正常网址和重写网址后,我查看了print_r($_SERVER)的输出。当发现普通网址时,我发现$_SERVER['SCRIPT_URL']包含“/store.php”,并且当重写的网址被点击时,它包含我重写的路径。

这意味着我可以进行简单的测试并适当地重定向:

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");
}