我正在构建一个webcomic网站,但章节顺序发生了重大变化。我已经以这样的形式手动为自己编写了转换:
36 - > 26.1
37 - > 28
38 - > 28.1
39 - > 29
40 - > 30
41 - > 30.1
基本上,按照本指南,我想将http://www.domain.com/view.php?chapter=38
之类的所有网址转换为http://www.domain.com/c28.1
这样的新网址。
我还想确保请求页码的人(例如view.php?chapter=38&page=4
)将他们的页码传递给重定向,如下所示:c28.1/p4.html
。
看起来很简单,除了我有70左右的这些实现,并且有点担心,如果这显着伤害网站性能(70很多..?)并且无法获得漫画和页面要正确重写的变量。
所以我的问题是,我如何实现这一目标,我最好的解决方案是什么?如果性能没有问题,我宁愿将其与我的其他mod_rewrite代码保存在.htaccess中,但是如果唯一合理的方法是编写.php脚本并调用它来进行重定向,我可以这样做 - 虽然我真的不知道如何让PHP这样做。
请记住,所提到的70个左右是我唯一拥有的,所以我不打算建立一个易于访问的数据库。我只是想让重定向工作最小化。
如果有任何回应,我将非常感激。如果有人能帮我解决这个问题,请提前致谢。
答案 0 :(得分:0)
我认为接近的一种较轻的方式(就.htaccess文件中的行而言)就像你提到的那样,使用.htaccess来处理网址,如:
RewriteRule ^c([0-9]+)$ view.php?chapter=$1
RewriteRule ^c([0-9]+).([0-9]+)$ view.php?chapter=$1§ion=$2
RewriteRule ^c([0-9]+).([0-9]+)/p([0-9]+).html$ view.php?chapter=$1§ion=$2&page=$3
然后将它们映射到将处理单个内容的php脚本。
我可以建议你也应该通过rewriterule映射所有旧网址的301重定向,以便允许来自搜索引擎serp的人重定向到内容的正确新网址。 / p>
希望这有帮助。
答案 1 :(得分:0)
我最终咨询了freenode #httpd的优秀人才,并得到了解决方案。对我来说,因为我只想捕获对view.php的请求,我发现它只是编写了一个从数组中收集东西的view.php脚本。不需要mod_rewrite。我现在使用的脚本如下:
<?
$chapters = array(
// old => new
1 => 2,
2 => 3,
3 => 4,
10 => 21
);
if (! isset($_GET['chapter']) || ! isset($chapters[$chapter = (int)$_GET['chapter']])) {
header('HTTP/1.1 404 Not Found');
echo 'Page Not Found';
exit;
}
$url = '/c' . $chapters[$chapter];
if (isset($_GET['page']))
$url .= '/p' . $_GET['page'] . '.html';
header('Location: ' . $url, 301);
?>
感谢您的帮助,gh3。