我正在将现有项目从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]
答案 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的回答)。