.htaccess - 需要301一个带有特殊字符的URL

时间:2010-12-05 03:06:34

标签: php .htaccess mod-rewrite special-characters http-status-code-301

我有一个遗留网站的长网址,我需要301,例如:domain.com/web/vehicle/655520/2007-Hummer-H2---?sort_by=year&args=All_years--All_makes- -All_models - All_body_types - All_vehicles

我需要将此(以及更多类似的网址)重定向到重新设计的网站上的新页面,例如:domain.com/hummer.php

如何从URL中删除特殊字符(例如---?)和其他所有内容,以便我可以成功使用301?

2 个答案:

答案 0 :(得分:0)

你不能用mod_rewrite“剥离”任何东西 您只能从字符串的某些部分创建引用,并使用它们来构建新的URL。

如何做到这一点取决于您希望从原始网址构建的网址。

答案 1 :(得分:0)

为什么需要?除非您计划将长长的重定向列表编码到.htaccess文件中,否则您应该在PHP中执行所有重定向。

从您提供的网址示例中,我假设所有项目都有一个与网址绑定的唯一ID。在这种情况下,您可以在数据库中创建一个地图,表示项目655520的“正确”URL是hummer.php。您可以使用它来执行PHP的重定向。

以下是如何执行此操作的示例。我假设您已经有一个.htaccess文件,它将URL转换为GET。像RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]

这样的东西
//determine if you were passed a "legacy URL" (not shown)
if (legacyURL) {
  $urlComponents = $explode("/", $_GET['request']);
  $url = getItemUrl($components[2]);
  header("Location: " . $url,TRUE,301);
  exit();
}