2016-09-19 95 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