301重写页面的重定向

时间:2016-10-24 11:42:51

标签: .htaccess redirect mod-rewrite url-rewriting http-redirect

我正在将现有项目从root移动到语言文件夹/ fr,以便在/ en中创建一个不同的英语项目。

项目很简单,它包含两个页面(index.php和liste.php)。 第一页是接收参数

/index.php?hash=[page-hash]

并在.htaccess中重写为

/[page-hash].html

所以这里是旧的.htaccess的内容:

RewriteEngine On
#########   Page rewriting  ########
RewriteRule ^liste\.html$           liste.php [QSA,L]
RewriteRule ^(.*)\.html$            index.php?hash=$1 [QSA,L]

我希望将由Google编制索引的旧重写页面(www.domain.com/ [page-hash ].html)重定向到www.domain.com/fr/[page-hash]。 html,以便谷歌仍然可以在新的位置找到它们并被告知它已被移动。

这不是重写,而是重定向,我不知道该怎么做。我想我必须使用RewriteCond和[R = 301],但我不知道如何。

当然新页面也必须重写(/fr/index.php?hash=[page-hash)到/fr/[page-hash].html),并且根目录通常会重定向到/ fr。所以我已经制作了这个新的.htaccess:

RewriteEngine On
######## Redirect from root to /fr #######
RewriteRule ^$                      /fr 
Redirect 301 /liste.html            /fr/liste.html
Redirect 301 /liste.php             /fr/liste.html
#########   Page rewriting  ########
RewriteRule ^fr/liste\.html$        /fr/liste.php [QSA,L]
RewriteRule ^fr/(.*)\.html$         /fr/index.php?hash=$1 [QSA,L]
RewriteRule ^en/list\.html$         /en/list.php [QSA,L]
RewriteRule ^en/(.*)\.html$         /en/index.php?hash=$1 [QSA,L]

2 个答案:

答案 0 :(得分:0)

你非常接近。您可以压缩这些内容,当您的替换包含查询时,您只需要QSA(和B)。

RewriteEngine On
######## Redirect from root to /fr #######
RewriteRule ^$ /fr/ [L,R=301]
RewriteRule ^([^/]+)\.(?:html|php)$ /fr/$1.html [L,R=301]
######### Page rewriting ########
RewriteRule ^(fr/liste|en/list)\.html$ $1.php [L]
RewriteRule ^(fr|en)/([^/]+)\.html$ $1/index.php?hash=$2 [L,B,QSA]

答案 1 :(得分:-1)

这是完整的答案。订单很重要。

RewriteEngine On
#########   Page rewriting  ########
RewriteRule ^fr/liste\.html$        /fr/liste.php [L]
RewriteRule ^fr/(.*)\.html$         /fr/index.php?hash=$1 [L,B,QSA]
RewriteRule ^en/list\.html$         /en/list.php [L]
RewriteRule ^en/(.*)\.html$         /en/index.php?hash=$1 [L,B,QSA]
################ Redirect from root to /fr ################
RewriteRule ^$                      /fr [L,R=301]
RewriteRule ^liste\.html$           /fr/liste.html [L,R=301]
RewriteRule ^(.*)\.html$            /fr/$1.html [L,R=301]

这仍然可以浓缩(参见Walf的回答)。