11

.htaccess に関するいくつかの問題で立ち往生しています。簡略化されたファイル サーバー構造は次のとおりです。

/index.php
/signup.php

言語切り替えを処理するために仮想 URL を使用する必要があります。

www.mydomain.com/en/signup.php   
www.mydomain.com/de/signup.php

したがって、私の .htaccess は、URL に /en/ または /de/ が含まれているかどうかを確認し、それを次のように変換する必要があります。/signup.php?language=de

基本的に話されているため、言語タグを削除する必要がありますが、残りのフォルダー構造は保持します。

ローカルの xampp とライブ サーバーの両方で動作するはずです。何か案は?ありがとう

4

1 に答える 1

16

これまでに何を試しましたか?次のようなものが機能するはずです。

RewriteRule ^/(en|de)/(.*)$  $2?language=$1 [L]

意味はかなり明白です: 2 番目の一致 ( $2)、つまり URL の 2 番目のスラッシュの後に来るものを取り、?language=その後に a を延期し、最初の一致 ( $1)、つまり最初の 2 つのスラッシュの間にあるものを取得します。またはのいずれende。何か (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 番目のルールは最初のルールが一致しない場合にのみ適用されるため、ルールをこの順序にすることが重要です。

于 2013-05-31T10:22:44.960 に答える