Apache 使用mod#u rewrite重定向70+;带有变量的URL
我正在建设一个网络喜剧网站,但章节顺序已经发生了重大变化。我已经以如下形式为自己手动编写了转换: 36->26.1 37->28 38->28.1 39->29 40->30 41->30.1 基本上,根据本指南,我想转换所有URL,如Apache 使用mod#u rewrite重定向70+;带有变量的URL,apache,mod-rewrite,variables,Apache,Mod Rewrite,Variables,我正在建设一个网络喜剧网站,但章节顺序已经发生了重大变化。我已经以如下形式为自己手动编写了转换: 36->26.1 37->28 38->28.1 39->29 40->30 41->30.1 基本上,根据本指南,我想转换所有URL,如http://www.domain.com/view.php?chapter=38到较新的类型,如http://www.domain.com/c28.1 我还想确保那些请求页码的人,比如view.php?chapter=38&page=4将他们的页码传递给重定向,
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_重写代码一起保存在.htaccess中,但是如果唯一合理的方法是编写一个.php脚本并调用它来执行重定向,我可以做到这一点——尽管我真的不知道如何让php做到这一点
请记住,提到的70个左右是我唯一拥有的,所以我不想建立一个容易访问的数据库。我只想重定向工作,以最小的麻烦
如有任何回应,我将不胜感激。如果有人能帮我解决这个问题,请提前感谢。我认为一种更轻松的方法(就.htaccess文件中的行而言)是,如您所述,使用.htaccess来处理URL,如:
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脚本
我可以建议您,您还应该使用301重定向规则映射所有旧url,以便允许来自搜索引擎serp的用户重定向到内容的正确新url
希望这能有所帮助。我最终咨询了freenode#httpd的优秀员工,并找到了解决方案。对我来说,因为我只想捕获view.php的请求,所以我发现只需编写一个view.php脚本来收集数组中的内容就可以了。不需要修改。我现在使用的脚本如下所示:
<?
$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。哦,我已经有了这样一个角色。为了澄清这一点,旧的URL看起来像
view.php?chapter=1&page=3
`view.php?chapter=1',没有任何修改技巧,但新的URL(格式为c1/p1.html
实际上重定向到了viewer.php?chapter=1&page=1
)在新漫画展示脚本名称的末尾,只是为了让事情不那么混乱,因为我计划在未来制作这个大地图。上面的代码似乎是启用更漂亮的/c1/p1.html
URL的代码,我已经有了它。所以这并不能真正解决我的问题。。