0

我想用 htaccess 重定向很多页面(150 个链接),但我想问是否可以有重写规则。

我的旧链接是;

http://www.sitename.com/aaa/category/article.html

http://www.sitename.com/aaa/category/differentarticle.html

http://www.sitename.com/aaa/anothercategory/anotherarticle.html

http://www.sitename.com/aaa/anothercategory/anotherarticletoo.html

新链接是

http://www.sitename.com/aaa/111-category/999-article.html

http://www.sitename.com/aaa/111-category/990-differentarticle.html

http://www.sitename.com/aaa/222-anothercategory/888-article.html

http://www.sitename.com/aaa/222-anothercategory/886-anotherarticletoo.html

问题是有很多文章,而且它们都有不同的文章 ID。

我如何为每个类别编写规则以进行 301 重定向?

谢谢..

4

1 回答 1

1

我假设您想将http://www.sitename.com/aaa/category/article.html重写为http://www.sitename.com/aaa/111-category/999-article.html,并且您正在使用 PHP 和某种形式的数据库来存储文章(至少是名称和 ID)

ModRewirte 不能添加额外的数据(除非它是硬编码的值,它将对每个 url 应用相同的值)。

但是,您可以让它对所有内容进行内部重写(而不是重定向)index.php,然后 index.php 可以读取 $_SERVER['REQUEST_URI'] 以查看请求的 URL。这将为您/aaa/category/article.html提供然后您可以使用 PHP 做任何您想做的事情,包括发送重定向。

以下是我执行相同技巧但目的不同的摘录。第一位忽略诸如 css 和 images 文件夹之类的位置。与这些位置不匹配的任何内容都将发送到 index.php

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine On

RewriteCond %{REQUEST_URI} !/css/.*$
RewriteCond %{REQUEST_URI} !/images/.*$
RewriteCond %{REQUEST_URI} !/js/.*$
RewriteCond %{REQUEST_URI} !/favicon\.ico$
RewriteCond %{REQUEST_URI} !/robots\.txt$
RewriteRule . index.php

和你的 index.php(或任何你想叫它的东西:我的是 router.php)

<?php
function http_redirect($url, $code=301) {
    header('HTTP/1.1 '.$code.' Found');
    header('Location: '.$url);
    echo 'Redirecting to <a>'.$url.'</a>.';
    die('');
}


$loc = explode('?', $_SERVER['REQUEST_URI']); //Get rid of any query string
$query = loc[1];
$loc = explode('/', $loc[0]);
//you now have
//array('aaa','category','article.html')
//look these up in the database to build your new URL
http_redirect('my/new/url'.$loc[0]); //whatever, don't forget the query string if it has 1
?>

您还应该添加更多错误检查,我将其省略以保持简短

于 2012-08-26T01:21:24.120 回答