2016-09-19 97 views
1

事实证明,由于不同的原因必须更改我的网站URL,旧的URL在Google中编入索引,我希望你浏览它们,新内容将与新网址一起显示。301重定向Apache显示错误的网址

我加了这一点:

Redirect 301 /library/books/pitz-lower.php http://www.example.com/library/pitz-lower.php 

但是从谷歌得到的,在浏览器的URL看起来是这样的:

http://www.example.com/library/pitz-lower.php?url=library/pitz-lower 

htaccess的

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteEngine On 


RewriteBase/
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] 
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L] 




RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /library/library\.php\?url=([^\s]+) [NC] 
RewriteRule^/library/%1.php? [L,R=301] 
RewriteCond %{REQUEST_URI} !^/library/library\.php 
RewriteRule ^library/(.+)\.php$ /library/library.php?url=$1 [L] 

</IfModule> 

#r301 

Redirect 301 /library/books/pitz-lower.php http://www.example.com/library/pitz-lower.php 

我不明白为什么发生这种情况,有人给我一只手?谢谢 !!

+2

可以显示完整的.htaccess吗? – anubhava

+2

你是什么意思“但要从谷歌获得”? – arkascha

+0

我编辑帖子,谢谢!对不起,我的英语 – PlayerWet

回答

1

有2个问题:

  1. 混合mod_rewrite规则和mod_alias规则(即Redirect指令)是不好的,因为这些2个模块在不同时间运行。
  2. 保留301在内部重写之前重定向规则。

你修改的.htaccess应该是:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteRule ^library/books/pitz-lower\.php$ /library/pitz-lower.php [L,NC,R=301] 

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] 
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L] 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /library/library\.php\?url=([^\s]+) [NC] 
RewriteRule^/library/%1.php? [L,R=301] 

RewriteCond %{REQUEST_URI} !^/library/library\.php 
RewriteRule ^library/(.+)\.php$ /library/library.php?url=$1 [L,QSA] 

记住清除浏览器缓存,同时测试此。

+2

你很大很大,它已经完全解决了,令人印象深刻。非常感谢 !! – PlayerWet