アップデート
質問の説明
コメントのページとサブドメインの問題に関しては、この特定のケースでは関係ありません。事実、あなたの質問の受信URLは: www.domain.com/subdomain
であり、名前を除いて、/subdomain
明らかにページです。
実際のサブドメインは確かに別のドメインの一部であるドメインであり、それを保持するURL形式はのようなものなsubdomain.domain.com
ので、私の側では混乱はありませんでした。
十分に明確ではないのは、リダイレクトがどのように処理されるかです。あなたの質問によると、「サブドメイン」をパス全体に置き換えると、いくつかの例があります。
www.domain.com/
に行く必要があります www.domain.com/LangCode/
、(以前の作業リダイレクト)
www.domain.com/page
に行く必要があります www.domain.com/LangCode/page
www.domain.com/page1/page2/page3/etc/
に行く必要があり www.domain.com/LangCode/page1/page2/page3/etc
ます。この可能性は問題ではありませんが、最終的には必要になる可能性があります。
このような場合、受信URLとリダイレクトURLのページは同じ名前である必要がありますが、受信URLに存在する必要はありませんが、リダイレクトURLにページが存在する必要があるため、デフォルトのスクリプト(index.phpまたはindex.htmlなど)リクエストを処理します。
つまり、リダイレクトの対象となる各ページにスクリプトが必要です。言語ごとに少なくとも2つと言います。
私が理解している限り、それは質問と補足コメントが示していることですが、それは実際的なアプローチではないようです。
推奨される解決策
より良いアプローチは、すべてのリクエストを処理するルートフォルダにある単一のスクリプトです。これは、例を使用してより適切に説明できるアイデアです。
www.domain.com/
常にブラウザのアドレスバーに表示されますが、内部的に
www.domain.com/lang_handler.php?lang=sv
またはに移動します
www.domain.com/page1/
常にブラウザのアドレスバーに表示されますが、内部的にはwww.domain.com/lang_handler.php?lang=sv&target_page1=page1
これは、mod_rewriteディレクティブを使用して.htaccessで実現できます。次に例を示します。
RewriteEngine On
RewriteBase /
# Set managed languages here, except default (en)
RewriteCond %{HTTP:Accept-Language} ^(sv|ne|no).*$ [NC]
# Replace the names of the script and the parameters in the next 2 lines
RewriteCond %{REQUEST_URI} !lang_handler\.php [NC]
RewriteRule ^([^/]+)?/?$ lang_handler.php?lang=%1&target_page1=$1 [L,QSA]
# If no match, set English
# Replace the names of the script and the parameters in the next 2 lines
RewriteCond %{REQUEST_URI} !lang_handler\.php [NC]
RewriteRule ^([^/]+)?/?$ lang_handler.php?lang=en&target_page1=$1 [L,QSA]
上記のルールセットはサイレントにマップします
http://www.domain.com/
またhttp://www.domain.com/page1
に
http://www.domain.com/lang_handler.php?lang=LangCode&target_page1=page1
はどこLangCode
にありますか、sv
ne
no
またはen
デフォルトです。
この例は、1ページまたはページなしでのみ機能します。ただし、任意の数のページを処理できますが、それに応じてルールを変更する必要があります。より多くのパラメーターと正規表現グループをRewriteRulesに追加する必要があります。