Оптимизация поведения URL-маршрутизатора - PullRequest
1 голос
/ 11 декабря 2011

Я пытаюсь создать URL-роутер, где язык сайта определяется первыми двумя символами в домене. Пример: domain.com/en (сайт будет отображать контент на английском языке).

Сценарий ниже - это то, что я придумал до сих пор. Фокус на функциональности, а не на SEO. Однако я бы хотел, чтобы он был оптимизирован для обеих сторон, и, честно говоря, я не эксперт по поисковой оптимизации.

  • Сможет ли Googlebot индексировать английский и датский контент? (обратите внимание, как я понимаю язык посетителей и делаю переадресацию соответственно)
  • Могу ли я что-нибудь сделать для улучшения функциональности скрипта, включая обработку SEO?

Все предложения по улучшению приветствуются.

Заранее спасибо!

    private $allowedLang = array('da', 'en');
    private $langRouter = array(
        'en' => 'en_US',
        'da' => 'da_DK'
    );

    function __construct() {
        $locale = in_array($_GET['locale'], $this->allowedLang);

        if ($locale) {
            // If get-var locale is allowed, set it as session
            $_SESSION['language'] = $_GET['locale'];
        }
        if (empty($_SESSION['language'])) {
            // If session isn't set, use visitor's browser language
            $_SESSION['language'] = $this->getLanguage();
        }

        // Only redirect if get-var locale is empty or isn't allowed, and target file is not located in lib folder (ajax files etc.)
        if ((empty($_GET['locale']) || !$locale) && substr($_SERVER['SCRIPT_NAME'], 0, 4) != '/lib') {
            header('Location: /'.$_SESSION['language']);
        }

        $this->setLanguage($_SESSION['language']);
    }

    public function setLanguage($lang) {
        // If $lang is allowed use it, else default to DEFAULT_LANGUAGE
        $locale = (in_array($lang, $this->allowedLang) ? $this->langRouter[$lang] : DEFAULT_LANGUAGE);

        // Initiate gettext
        putenv("LC_ALL=$locale");
        setlocale(LC_ALL, $locale);
        bindtextdomain("messages", CLIENT_PATH."/lib/locale");
        textdomain("messages");
    }

    /**
     * Get the visitor's language based on browser settings.
     * If language isn't found or isn't allowed, default to DEFAULT_LANGUAGE
     */
    private function getLanguage() {
        if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
            $langs = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
            foreach ($langs as $value) {
                $choice = substr($value, 0, 2);
                if (in_array($choice, $this->allowedLang)) {
                    return $choice;
                }
            }
        }
        return DEFAULT_LANGUAGE;
    }
}
...