2012-12-28 35 views
2

可能重复:
.htaccess rewrite to redirect root URL to subdirectory更改我的所有网站链接:最好的方法是什么?

我需要改变我的网站的所有链接(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 

... 
... 
... 

什么是做到这一点的最好办法后?

回答

2

您可以将其重定向到新的Location

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

如果您使用的PHP版本> = 5.4.0,你也可以用

http_response_code(301); 
发送正确的HTTP状态代码301(永久移动)

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

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

RewriteCond指令防止重写URL,它已经与/blog开始。否则,你会得到无尽的递归。 RewriteRule指令前缀为/blog的所有URL,不适用更多规则L并发送HTTP状态代码301 R=301

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

+0

旧页面无法正常工作,可以这样做.htaccess?每个链接到我的网站将重定向,并添加博客域 – bosami

+0

对不起,我的英语不好 – bosami

+1

你有鸡之前的鸡蛋问题。如果文件被移动到* blog *子目录,则不会有文件放置此代码。 –

5

使用mod_rewrite

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

这将前缀blog所有链接,并永久重定向他们。

相关问题