对某些人来说可能并不棘手,但对我来说却很棘手。
我最近在博客上移动了一些内容,我需要轻松地将用户重定向到新页面。
以前,我的所有文章都是这样链接的:
http://www.my-site.com/blog/my-article-title
但我改为:
http://www.my-site.com/blog/article/my-article-title
我想将访问“blog / my-article-title”的用户重定向到“blog / article / my-article-title”。
棘手的部分是我的博客还有其他部分,例如档案和搜索,其网址为“博客/档案”或“博客/搜索”。正如您可能已经想到的那样,需要一个更智能的解决方案,因此查找我的档案页面的用户不会被转发到称为“档案”的不存在的文章。
任何帮助?
答案 0 :(得分:6)
你想使用mod_rewrite(或你的网络服务器等效)而不是php。
答案 1 :(得分:4)
在.htaccess文件中这比PHP更好;和杰米·扎温斯基(Jamie Zawinski)关于如果你使用正则表达式弹簧有两个问题的着名引言。您需要.htaccess的最小正则表达式,而PHP则不需要。
RewriteCond $1 !^(archives|search)
RewriteRule blog/(.*) http://www.my-site.com/blog/article/$1 [R=301]
或者,如果您有RedirectMatch
可用,则可以将其与已建议的否定前瞻结合使用:
RedirectMatch permanent blog/((?!archives|search).+) http://www.my-site.com/blog/article/$1
如果您需要使用PHP:
$urlparts = explode('/', $_SERVER['REQUEST_URI']);
if ( ! in_array($urlparts[1], array('archives', 'search')) ) {
$url = 'http://www.my-site.com/blog/article/' . $urlparts[2]
header('HTTP/1.1 301 Moved Permanently');
header("Location: $url");
exit;
}
正如您所看到的,它在PHP中要复杂得多,并且还需要启动解释器来执行服务器可以执行的操作,因此如果您有选项,请避免使用此方法。
答案 2 :(得分:0)
您可以使用负向前瞻,如下所示:
blog/((?!archives|search).+)