Regex 你能重写数学吗?
我计划将我的网站转换成一个新的CMS,但我想使用mod_rewrite将旧链接无缝地重定向到它们的新位置 问题是,我的新博客不会有与旧博客相同的文章编号,因为我将在第一篇文章中导入一些旧的博客条目。因此,我的mod_rewrite需要使用像Regex 你能重写数学吗?,regex,apache,mod-rewrite,Regex,Apache,Mod Rewrite,我计划将我的网站转换成一个新的CMS,但我想使用mod_rewrite将旧链接无缝地重定向到它们的新位置 问题是,我的新博客不会有与旧博客相同的文章编号,因为我将在第一篇文章中导入一些旧的博客条目。因此,我的mod_rewrite需要使用像old.php?article=125这样的URL,进行加法以计算出新的文章编号(例如+200),并重定向到new.php?i=325 mod_rewrite能自己做加法吗,或者我需要某种“助手”脚本来做吗?我相信这是推动“巫毒魔法”的力量,即mod_rewr
old.php?article=125
这样的URL,进行加法以计算出新的文章编号(例如+200),并重定向到new.php?i=325
mod_rewrite能自己做加法吗,或者我需要某种“助手”脚本来做吗?我相信这是推动“巫毒魔法”的力量,即
mod_rewrite
。我要么设计一个助手脚本来跟进这一点,要么在数据库级别实际迁移旧条目
后者将为您提供更好的稳定性和对系统布局的控制。所有旧条目都会有新的post id,所有内容都应该无缝匹配。它无法计算。也许你想用一个。Mod rewrite可以做正则表达式。如果您可以将新文章的值定义为相同的id加上1000,那么:
rewriteRule /article=(\d{1})$ /new.php?i=100$1
rewriteRule /article=(\d{2})$ /new.php?i=10$1
rewriteRule /article=(\d{3})$ /new.php?i=1$1
一种选择是完全忘记
.htaccess
文件中的旧链接。相反,构建一个自定义的404notfound
错误页面,并将Apache配置为在断开的链接上提供服务。该页面将是一个PHP脚本,它将根据简单表达式测试$\u服务器['REQUEST\u URI']
变量:
<?php
if( substr($_SERVER['REQUEST_URI'], 0, 7)=='old.php' ){
// Old link found!
}
?>
在“找到旧链接”条件内,您可以进行进一步处理:
因为为了一个目的有三条重写规则是很明智的。但这就是工作的完成,对吧;)这有点错误,因为我在模式的末尾忘了一美元(我修正了它),我确实想到了这一点,我可能会在1000后开始导入帖子。(另外,这会让我看起来像一个多产的作家!)+1对于克里夫尼,我喜欢这个想法,尽管可能有更快/更简单的方法。我想知道是否可以覆盖web主机上的默认错误处理程序?嗯…到目前为止,我已经能够在我所有的托管帐户中使用ErrorDocument。我喜欢这种方法,因为它不会为有效链接添加额外的重载,而有效链接通常占绝大多数。我喜欢这种解决方案,但如果你需要301重定向来进行seo??这个解决方案会不会先给你一个404,然后告诉谷歌这个页面不存在???@FeidaKila-PHP让你完全控制HTTP头,包括状态代码。阅读有关函数的更多详细信息。我知道header函数,但我想在通过PHP的header()函数执行301重定向之前,apache会给出404响应(通过Errordocument)。我错了吗??我应该用browserAh检查一下,但是我希望从ID0开始导入几百篇旧帖子,然后从停止的地方导入更新的帖子集(来自不同的CMS)。但正如Schlaviener所指出的,我可以在1000开始第二批导入,然后重写规则很简单,比如137=>1137。@ewall:花几个小时将数据整理到表中是值得的,不必依赖于
mod_rewrite
之类的东西。