我想用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重定向的每个类别编写规则?
谢谢..
答案 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
?>
你还应该添加更多的错误检查,我把它留空以保持简短