2

可能重复:
.htaccess 重写以将根 URL 重定向到子目录

我需要更改我网站中的所有链接(2455)。

当访问者来自谷歌(使用旧链接)时会出现问题,因为页面将404 page not found

我想将旧链接重定向到新版本的页面。例如:

旧链接:

http://example.com/hotel/13234
http://example.com/hotel/132
http://example.com/hotel/323
http://example.com/page/about_us
http://example.com/page/contact

新链接:(添加“博客”)在域之后

http://example.com/blog/hotel/13234
http://example.com/blog/hotel/132
http://example.com/blog/page/about_us
http://example.com/blog/hotel/323

...
...
...

做这个的最好方式是什么?

4

2 回答 2

5

使用mod_rewrite

RewriteEngine On
RewriteRule $ /blog [L,R=301]

这将为所有链接添加前缀blog并永久重定向它们。

于 2012-12-28T18:24:52.750 回答
2

您可以将它们重定向到新Location

header('Location: /blog' . $_SERVER['PHP_SELF']);

如果您使用 PHP 版本 >= 5.4.0,您还可以发送正确的 HTTP 状态代码 301(永久移动)

http_response_code(301);

当您想使用时,您可以使用和.htaccess重定向。RewriteCondRewriteRule

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/blog/
RewriteRule .* /blog$0 [L,R=301]

RewriteCond指令防止重写已经以/blog. 否则你会得到一个无休止的递归。该RewriteRule指令为所有 URL 加上前缀/blog,不应用进一步的规则L并发送 HTTP 状态代码 301 R=301

为此,必须允许这些指令在.htaccess. 您可以在主 conf 文件或虚拟主机上下文中使用相同的指令。

于 2012-12-28T18:16:24.360 回答