1

我需要将一些网址从旧版本的网站重定向到新网址。我没有发现简单 url 的问题,但我无法让带有查询字符串的 url 工作:

Redirect 301 /product_detail.php?id=1 http://www.mysite.com/product/permalink

它只是返回 404,未找到。

我也尝试过使用 Silex 上的路由(我正在使用的 PHP 微框架),但它也不起作用:

$app->get('/product_detail.php?id={id}', function($id) use ($app) {

    $prodotto = Product::getPermalink($id);

    return $app->redirect($app['url_generator']->generate('product',array('permalink'=>$prodotto)));
});

有没有办法通过一些 htaccess 规则让查询字符串被视为 url 的一部分并让它被正确重定向?

谢谢你。

4

1 回答 1

1

重定向 301 /product_detail.php?id=1http://www.mysite.com/product/permalink

Redirect是一个不适合操作查询字符串的 mod_alias 指令:

mod_alias 旨在处理简单的 URL 操作任务。对于操作查询字符串等更复杂的任务,请使用 mod_rewrite 提供的工具。

从Apache mod_alias 文档中提取

所以,mod_rewrite应该使用。根目录中的一个 .htaccess 文件中的相同示例将是这样的:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/product_detail\.php  [NC]
RewriteCond %{REQUEST_URI} !/product/permalink    [NC]
RewriteRule .*   /product/permalink       [R=301,NC,L]

它重定向

http://www.mysite.com/product_detail.php?id=1

至:

http://www.mysite.com/product/permalink?id=1

查询会自动附加到替换 URL。

对于内部映射,将 [R=301,NC,L] 替换为 [NC,L]

于 2013-03-20T03:47:54.657 回答