これまでに何を試しましたか?次のようなものが機能するはずです。
RewriteRule ^/(en|de)/(.*)$ $2?language=$1 [L]
意味はかなり明白です: 2 番目の一致 ( $2
)、つまり URL の 2 番目のスラッシュの後に来るものを取り、?language=
その後に a を延期し、最初の一致 ( $1
)、つまり最初の 2 つのスラッシュの間にあるものを取得します。またはのいずれen
かde
。何か (en
またはだけでなくde
) を言語として一致させたい場合は、ルールを次のように変更します。
RewriteRule ^/(.+?)/(.*)$ $2?language=$1 [L]
注意:?
最初のグループの は、最初のスラッシュで一致を停止させるため、たとえば、書き直さないようにします。
/en/subdir/pippo.php
に
pippo.php?language=en/subdir
むしろ
subdir/pippo.php?language=en
疑問がある場合は、Apache Web サイトに優れたドキュメントがあります。
編集:デフォルト言語
他のすべてのリクエスト (つまり、/en/
またはで始まらない URL /de/
) をデフォルト言語 (たとえば、 ) にリダイレクトするにはen
、まず、認識したい言語プレフィックスを知ってから、次のルールを使用する必要があります。 3 つの -3- 言語があり、コードen
は 、de
およびfr
:
RewriteEngine On
RewriteBase /
RewriteRule ^(en|de|fr)/(.*)$ $2?language=$1 [L,QSA]
RewriteRule ^(.*)$ $1?language=en [L,QSA]
最初に正確な言語セットを定義しない場合RewriteRule
(たとえば、以前の「任意の言語」ソリューションを使用)、ネストされたページで言語検出が失敗する可能性があります。最初のルールはページを言語コードと照合してから終了し、2 番目のルールは最初のルールが一致しない場合にのみ適用されるため、ルールをこの順序にすることが重要です。