我假设您想将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
?>
您还应该添加更多错误检查,我将其省略以保持简短