6

既存の Web サイトを多言語化するよう依頼されました。

これに備えて、既存のすべてのページを /path/page から /en/path/page に移動する必要がありました

既存の受信リンクを維持するには、htaccess リダイレクトを設定して、元の URL から新しい /en/path/page URL にリクエストを送信する必要がありますが、これを機能させるのに問題があります。

これは私が現在持っているものです。

RewriteCond %{REQUEST_URI} !^/en$
RewriteRule ^(.*)$ /en/$1 [R=301,L]

これは、要求された URI をチェックすることを意図していると思います。/en で始まらない場合は、要求された URI の先頭に /en を追加します...しかし、機能しないため、明らかに間違っています。

どんな助けでも感謝します。ありがとうございました。

アップデート。これは ExpressionEngine サイトであり、URL の index.php 部分を削除する追加のルールがあるため、両方のルールがここにあります。

# Rewrite for new language based urls
# This is to try and get all current pages going to /en/(old url) with a 301 redirect
RewriteCond %{REQUEST_URI} !^/en(/.*)?$
RewriteRule ^(.*)$ /en/$1 [R=301,L]


# Removes index.php
RewriteCond $1 !\.(gif|jpe?g|png|ico)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

index.php の後に言語を書き直して、これも試しました。私はまだループで立ち往生しています。

4

1 に答える 1

6

は の直後の文字列の終わりを示している/enため、URI が正確に ではないかどうかをチェックします。$en

これを試してみてください。URI が正確ではないか、または で始まっていないかどうかを確認/enし、そうである場合/en/は先頭に を追加します。/en//en/

RewriteCond %{REQUEST_URI} !^/en(/.*)?$
RewriteRule ^(.*)$ /en/$1 [R=301,L]

更新ファイルにある他のルールを考慮して.htaccess、次の内部リダイレクト への言語ルールが再度一致しないようにする必要があり/index.php...ます。そうしないと、無限ループが発生します。

これを防ぐためのより良い方法があるかもしれませんが、最初に頭に浮かぶのはindex.php、最初の状態でチェックすることです:

RewriteCond %{REQUEST_URI} !^/(index\.php|en)(/.*)?$

したがって、これにより、内部リダイレクト後にルールが適用されなくなります。ただし、注意してください。これにより、内部リダイレクトがindex.php!

于 2013-08-14T11:13:50.463 に答える