Мультиязычный поддомен.Как реализовать? - PullRequest
0 голосов
/ 16 апреля 2011

У меня есть требование, что когда пользователь меняет язык, кроме английского, он должен отображаться в URL как поддомен.Пример:

английский сайт = www.abc.com
испанский сайт (американский испанский) = esp-us.abc.com
испанский сайт (испанский испанский) = esp-es.abc.com

Как это реализовать?Я использую код воспламенитель PHP.У меня есть таблица с именем L_languages, которая является таблицей поиска языка.Он имеет два столбца: один для кода языка (esp) и другой столбец для кода страны (нас), поэтому я могу извлечь это из базы данных в соответствии с языком пользователя.

Но как записать его всубдомен и сделать этот процесс полностью управляемым базой данных, поэтому завтра, если я добавлю новый язык, субдомен будет работать?

  • Сайт работает под управлением Apache в CentOS.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 01 мая 2011

Вы можете сделать так, чтобы HTACCESS выполнил правило mod_rewrite, идентифицирующее эти экземпляры, или вы можете применить общее правило в HTACCESS, а затем сделать так, чтобы PHP выполнял тяжелую работу.Или их комбинация.

HTACCESS mod_rewrite Solution

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www.)?abc.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.+).abc.com$
RewriteRule ^(.*)$ $1?lang=%1 [QSA,L]

Примеры использования этого правила:

No Change - These are assumed as the Base
http://www.abc.com
  ==> http://www.abc.com
http://abc.com
  ==> http://abc.com
Language Coded Subdomains
http://de.abc.com
  ==> http://de.abc.com/?lang=de
http://esp-es.abc.com
  ==> http://esp-es.abc.com/?lang=esp-es
Language Coded Subdomains with filename & query
http://esp-us.abc.com/filename.htm
  ==> http://esp.us.abc.com/filename.htm?lang=esp-us
http://fr.abc.com/filename.htm?name=value
  ==> http://fr.abc.com/filename.htm?lang=fr&name=value

PHP Solution

Включить этот кодгде-то в верхней части страницы (до того, как будет сгенерирован контент для конкретного языка).

<?php
$lang = false;
if( preg_match( '/^(.+)\.abc.com$/' , $_SERVER['HTTP_HOST'] , $matches )
    && count( $matches )==2
    && $matches[1]!='www' ){
  $lang = $matches[1];
}

Затем вы можете использовать переменную $lang (которая будет false, если либо A) без субдомена, либоБ) используется поддомен www.Кроме того, вы можете проверить значение переменной $lang по массиву допустимых языков и, если она отсутствует, снова сбросить его на false.

0 голосов
/ 16 апреля 2011

Вы можете использовать PHP для обслуживания разных языков, но если вы хотите, чтобы эти субдомены работали, вам необходимо настроить ваш веб-сервер (Apache, IIS и т. Д.) Для настройки этих субдоменов. Вы хотите добавить ваш веб-сервер по вашему выбору. :)

...