使用htaccess重定向大量页面

时间:2012-08-26 00:57:13

标签: .htaccess redirect categories article

1 个答案:

答案 0 :(得分:1)

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

ModRewirte无法添加额外数据(除非它是对每个网址应用相同内容的硬编码值)。

但是,您可以对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
?>

你还应该添加更多的错误检查,我把它留空以保持简短