0

私の htaccess ファイルでは、メインの index_eng.php ページに含まれるすべてのページを .html ファイルに書き直しています。

ここにファイルの内容があります

RewriteEngine on
RewriteRule (.*)\.html$ index_eng.php?page=$1 [L]
# ErrorDocument 404 /404.html"

そしてそれはうまく動作します。問題は、index_fr.php と呼ばれる index_eng.php と同じフォルダー レベルに別のページが必要なことです。これは、フランス語で同じページを持ち、htaccess コードを追加すると同様に機能します。

RewriteRule (.*)\.html$ index_fr.php?page=$1 [L]

最初のものだけが考慮されます。2番目のものは無視されます。htaccess が両方の構文を認識できるように、この問題の回避策はありますか?

4

3 に答える 3

2

あなたはこのようなことをすることができます..

RewriteEngine on
# If "lang" cookie is set, use it to get language preference
RewriteCond %{HTTP_COOKIE} ^lang=([a-z]{2,3})[-,;]? [OR]
# else use first language in HTTP Accept-Language request header
RewriteCond %{HTTP:Accept-Language} ^([a-z]{2,3})[-,;]?
# Rewrite home page requests to script, passing language preference in query string
RewriteRule ^$ /index.php?lang=%1 [L]

このようにして、ユーザーの設定を使用するか、ブラウザの設定を探し、変数を使用して適切なバージョンを選択するのに十分なほどスクリプトをスマートにします..

--edit--- コメントの質問に答えて。このようなことを試してください。

あなたの .htaccess にトップ条件を含め、をに置き換えRewriteRuleます

RewriteRule  (.*)\.html$ index_%1.php?page=$1 [L]

その後、に移動index_eng.phpするindex_en.phpと、うまくいくはずです(直接リンクで index_eng.php が使用されている場合は、それらをシンボリックリンクするだけです)。

于 2012-10-02T13:11:21.810 に答える
0

まず、2 番目のルールが無視される理由は[L]、ルール セットの処理を停止するフラグを使用しているためです。http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_l

2 番目に、同じパターンに一致する 2 つのルールを定義したいので、どちらが英語のインデックス ファイルに送られ、どちらがフランス語のインデックス ファイルに送られるべきかを判断する方法がありません。ルールにインジケーターを追加して、選択する言語を認識できるようにする必要があります。

RewriteRule ^en/(.*)\.html$ index_en.php?page=$1 [L]
RewriteRule ^fr/(.*)\.html$ index_fr.php?page=$1 [L]

en/pagename.html/のような URL に一致しfr/pagename.htmlます。または:

RewriteRule ^(.*)_en\.html$ index_en.php?page=$1 [L]
RewriteRule ^(.*)_fr\.html$ index_fr.php?page=$1 [L]

pagename_en.html/のようなURLに一致しますpagename_fr.html

于 2012-10-02T13:13:11.450 に答える
0

なぜこのように書き直さないのですか?

RewriteEngine on
RewriteRule (.*)_en\.html$ index_eng.php?page=$1
RewriteRule (.*)_fr\.html$ index_fr.php?page=$1

ユーザーにとって、現在彼がサイトの en/fr バージョンにいることを知ることは、より透過的です。書き換えを管理しやすくなります

于 2012-10-02T13:11:47.207 に答える