重定向旧URL(php?id = 123)以重写URL

时间:2015-03-26 06:55:26

标签: php .htaccess url mod-rewrite url-rewriting

我正在尝试将旧的网址(看起来像product_detail.php?cat_id = 9& id = 351)重写为新的重写网址。

但是当访问者访问我的网站时,他们可以访问旧网址和新网址。 如何将所有访问者重定向到新URL?

在示例中: mydomain.com/product_detail.php?cat_id=9&id=351 => mydomain.com/product/product-name-1.html

这是我的.htaccess内容。

Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ index.php
RewriteRule ^phong-trung-bay.html$ showroom.php

RewriteRule ^san-pham.html$ product.php

RewriteRule ^danh-sach-cong-trinh.html$ project_cat.php
RewriteRule ^cac-cong-trinh-(.*)-([0-9]*\.?[0-9]).html$ project.php?id=$2
RewriteRule ^cong-trinh-(.*)-([0-9]*\.?[0-9]).html$ project_detail.php?id=$2
</IfModule>

问题是访问者可以访问旧网址和新网址。所以每个内容我会有2个URL。

2 个答案:

答案 0 :(得分:0)

由于您使用php函数创建目标url文件名,因此无法使用.htaccess重写引擎。相反,你必须通过PHP重定向:

创建product_detail.php,或者如果它仍然存在,请将此代码放在开头:

$newUrl = '/product/' . createSlugFunction();
header("Location: ".$newUrl,TRUE,301);
exit();

虽然createSlugFunction()表示创建slug的函数。

答案 1 :(得分:0)

这是我的php标题

<? ob_start(); ?>
<!DOCTYPE html>
<html lang="vi">
<?

include("../init.php");
include_once("../includes/set_language.php");
include("../includes/library.php");
include ('../includes/image.php');

if($_GET["id"]<>"") {
$a_project=get_tblfield($_GET["id"],"projects","project_id");
$a_category=get_tblfield($a_project[0]["category_id"],"project_cat","category_id");
}
$newUrl = 'http://localhost/acmvn/vn/cong-trinh-' . LamDepURL($a_project[0]["title"]).'-'.$a_project[0]["project_id"].'.html';
header("Location: ".$newUrl,TRUE,301);
die();
?>
<?
session_start();
?>

这是.htaccess的内容

Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ index.php
RewriteRule ^phong-trung-bay.html$ showroom.php

RewriteRule ^san-pham.html$ product.php

RewriteRule ^danh-sach-cong-trinh.html$ project_cat.php
RewriteRule ^cac-cong-trinh-(.*)-([0-9]*\.?[0-9]).html$ project.php?id=$2
RewriteRule ^cong-trinh-(.*)-([0-9]*\.?[0-9]).html$ project_detail.php?id=$2
</IfModule>

如果我通过旧网址访问

http://localhost/acmvn/vn/project_detail.php?id=270

这将重写为

http://localhost/acmvn/vn/project-name-something-270.html

但代码

$newUrl = 'http://localhost/acmvn/vn/cong-trinh-' . LamDepURL($a_project[0]["title"]).'-'.$a_project[0]["project_id"].'.html';
header("Location: ".$newUrl,TRUE,301);
die();

会永远处理并让我陷入困境。 有人可以帮忙吗?