0

Opencart に基づく 3 つのサブドメインがあります。特定の言語の各ドメインに強制する必要があるもの

そのためには、サブドメインごとに _GET['language'] を厳密に定義する必要があります

en.handmade24.at -> language=en

ru.handmade24.at -> language=ru

www.handmade.24.at -> language=de

言語変数を強制するには.htaccessが良いオプションだと言われました...

しかし、どうすればルールを定義できますか? 何か助けはありますか?私はhtaccessでダミーです...

私のHtaccessは次のようになります

Options +FollowSymlinks

# Prevent Directoy listing 
Options -Indexes

# Prevent Direct Access to files
<FilesMatch "\.(tpl|ini)">
 Order deny,allow
 Deny from all
</FilesMatch>

# SEO URL Settings
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

それとも、より良いソリューションを提供できますか?

4

3 に答える 3

2
RewriteCond %{HTTP_HOST} ^(www\.)?handmade24\.at
RewriteRule ^(.*)$       $1?language=de [QSA,L]

RewriteCond %{HTTP_HOST} ^(\w+)\.handmade24\.at
RewriteRule ^(.*)$       $1?language=%1 [QSA,L]
于 2011-05-14T20:49:09.900 に答える
0

あなたのために働くべき.htaccessはここにあります:

Options +FollowSymlinks

# Prevent Directoy listing 
Options -Indexes

# Prevent Direct Access to files
<FilesMatch "\.(tpl|ini)">
 Order deny,allow
 Deny from all
</FilesMatch>

# SEO URL Settings
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?_route_=$1 [QSA,L,NE]

RewriteCond %{HTTP_HOST} ^(www\.)?handmade24\.at$ [NC]
RewriteRule ^(.*)$ $1?language=de [QSA,L]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.handmade24\.at$ [NC]
RewriteRule ^(.*)$ $1?language=%1 [QSA,L]
于 2011-05-14T21:50:40.680 に答える
0

まず、問題を解決したプロジェクトの OpenCart システムを取り出しましたが、このトリックは問題なく動作するはずです。

はい、.htaccess で実行できますが、お勧めしません。.htaccess をいじるのは、特定の場所で苦痛になる可能性があります。それを行うと、ある時点で何か間違ったことをしたり、何かを破損したりする可能性が高くなります。これが唯一の解決策ではないため、.htaccess を使用した方法については説明しません。

私がお勧めする解決策は、私が作成したちょっとした回避策/ハックです。サブドメインを使用してそれを行う方法を探しています。これは、Web サイトの多言語バージョンを実行するという Google の優先選択であるためです (もちろん TLD を除く)。

デフォルトの OpenCart 言語の選択/検出を覆す解決策を思いつきました。

まず、OpenCart インストールのルートにある index.php を開きます。

これで行を見つけに行きます:

if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']){
     $code = $session->data['language'];
} elseif (isset($request->cookie['language']) && array_key_exists($request->cookie['language'], $languages) && $languages[$request->cookie['language']]['status']) {
     $code = $request->cookie['language'];
} elseif ($detect) {
     $code = $detect;
} else {
     $code = $config->get('config_language');
}

次に、これらの行を次のように置き換えます。

$url_info = parse_url(str_replace('&amp;', '&', $config->get('config_url')));

foreach ($languages as $language)
{
    if ($language['code'] . '.' . $url_info['host'] == $request->server['HTTP_HOST'])
    {
        $overwrite_language = $language;
        break;
    }
}

if (isset($overwrite_language)) {
    $code = $overwrite_language['code'];
} elseif (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {
    $code = $session->data['language'];
} elseif (isset($request->cookie['language']) && array_key_exists($request->cookie['language'], $languages) && $languages[$request->cookie['language']]['status']) {
    $code = $request->cookie['language'];
} elseif ($detect) {
    $code = $detect;
} else {
    $code = $config->get('config_language');
}

これが何をするか (注: OpenCart は数行前にデータベースから利用可能な言語をロードしました):

  1. データベースから URL を取得し (key = 'config_url' の「設定テーブル」)、PHP 関数 parse_url を使用して URL を分割します (print_r() を実行して、どの部分かを確認します)。

  2. 次に、使用可能な言語 (管理パネルで有効になっている言語) をループします。

  3. ループでは、$language['code'] . '.' . $url_info['host']== $request->server['HTTP_HOST'](のエイリアス$_SERVER['HTTP_HOST']) かどうかを確認します。breakドメインに一致する言語が既に見つかっている場合は、リソースを浪費しないようにを入れました。

  4. OpenCart が上記のステートメントで作成した if elseif etc etc else ステートメントを編集しました。それが行うことは、$overwrite_language が設定されているかどうかをチェックすることです。設定されている場合は、ユーザーが " * 選択した * " 言語を作成しますif。他のもの(この小さな回避策/ハックを上書きします)。

-- おまけのヒント --

php.ini 設定ファイルにアクセスできる場合、または ini_set() を使用する権限がある場合は、サブドメイン間で PHP セッションを共有できます。

ini_set('session.cookie_domain', '.yourdomain.TLD');

(作成済みのセッションを破棄する必要がある場合があります)。これは利点かもしれませんが、デフォルトのショップ言語を上書きすることに注意してください。ただし、変更したifばかりの行の下にある 2 は変更できます。ただし、通貨は通常どおり機能するはずです。

- 仕上げ -

あなたがこの質問をしたのは長い間でしたが、あなたがそれを気に入って使ってくれることを願っています.

于 2014-02-25T21:02:04.527 に答える