2016-10-24 12 views
0

/enにある別の英語プロジェクトを作成するために、既存のプロジェットをルートから言語フォルダ/ frに移動します。301リライトされたページのリダイレクト

プロジェクトはシンプルで、2つのページ(index.phpとliste.php)で構成されています。最初のページは、パラメータ

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

を受けていたので、ここで

/[page-hash].html 

としての.htaccessに書き直された が古い.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にリダイレクトされ、Googleはまだ新しい新しい場所でそれらを見つけるそれが移動されたことが通知されます。

これはリルーティングではなく、リダイレクトであり、その操作方法はわかりません。私は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

私は、少なくともその一部を手に入れました。私はリダイレクトルールに[R]を使用し、[L]命令でliste.html 'RewriteRule^liste \ .html $ \t /fr/liste.html [QSA、R、L]'にそれを適用します。他のページをリダイレクトするために[R]ルールを使います: 'RewriteRule ^(。*)\ .html $ /fr/index.php?hash=$1 [QSA、R]' – bolino

答えて

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] 
+0

Op **/path /?q = foo **〜**/foo ** QSAはここでの解決策ではありません。 – starkeen

+0

ありがとうございますが、解決策ではありません。違った表現をするために、私は2つのルールを連続して適用したいと思う。最初に、これは(リダイレクト): 'RewriteRule ^(。*)\ .html $ /fr/index.php?hash=$1 [R = 301]'そして、これ(書き換え): 'RewriteRule^fr /(。 *)\ .html $ /fr/index.php?hash=$1 [QSA、L] 'となります。永続的な問題は、このルールをすべてのハッシュに適用する必要がありますが、/liste.htmlではなく/liste.phpであることです。 – bolino

+0

最初の2つのルールは*リダイレクトです。つまり、 'R = 301'と同じです。それは古いpretty URLから新しいpretty URLにリダイレクトされます。あなたはそれらを試しましたか? – Walf

-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の答えを参照)。

+0

最後のルールは無限にリダイレクトされません。 html $ /fr/$1.html [L、R = 301] 'は' somehash.html'にマッチしますが、 'en/somehash.html'と' en/fr/en/fr/cng/fy3/qo4ncg/6R $$%^ /#CNO/.html'となります。 – Walf

+0

これは最後のルールなので、すべてのルールに '[L]'フラグがあるので、私はそれをテストし、それはすべてのケースで動作しています。私は '。*'を '[^ /] +'に変更してより排他的にすることができます。 – bolino

関連する問題