Переписать .htaccess для языковых поддоменов - PullRequest
3 голосов
/ 02 марта 2012

Мне нужно настроить субдомены на моем сайте для поддержки мультиязычности.
Я могу настроить домены для локального использования, указывая на папку, но мой хост не позволяет мне указывать их на основной корень, где мое приложение

/public/es
/public/www/index.php

es.domain.com должен указывать на /public/www/index.php

Я даже не могу использовать символические ссылки в папке /es/.

Они ответили мне

Что касается вашего хостинг-пакета, мы можем предложить вам использовать инструменты .htaccess и mod_rewrite. Вы можете поместить файл .htaccess в свои подкаталоги, чтобы переписать URL-адрес es.domain.com на domain.com/es/anything_else

Таким образом, посетитель или поисковая система все равно увидят

es.domain.com / что угодно как адрес.

Я попробовал это папка /es/, но получил 403

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^es.domain.com/?$   ^domain.com/es_ES?$ [L,R=301]   
</IfModule>

РЕДАКТИРОВАТЬ Мой сайт настроен на изменение языка с использованием субдомена es.domain.com.

Ответы [ 2 ]

6 голосов
/ 09 марта 2012

Вот что вы, возможно, захотите сделать, чтобы иметь возможность обрабатывать в будущем много под-языков.

Проверьте ваш хост: если он начинается с es, то измените ваш корень документа .Вот совет:

RewriteCond %{HTTP_HOST} ^es\.mydomain\.com$
# Change the path:
RewriteRule ^/?$ /public/www/index.php

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

RewriteCond %{HTTP_HOST} ^(us|fr|pt)\.mydomain\.com$
# Create an environment variable to remember the language:
RewriteRule (.*) - [QSA,E=LANGUAGE:%1]

# Now check if the LANGUAGE is empty (= doesn't) exists
RewriteCond %{ENV:LANGUAGE} ^$
# If so, create the default language (=es):
RewriteRule (.*) - [QSA,E=LANGUAGE:es]

Хорошо, теперь у нас есть переменная окружения, в которой установлен язык.

Вы просили об этом:

es.domain.com необходимо указать на /public/www/index.php

Итак, добавьте это последнее правило:

RewriteCond %{ENV:LANGUAGE} ^es$
# Change the root folder:
RewriteRule ^/?$ /public/www/index.php

В общем:

RewriteCond %{HTTP_HOST} ^(us|fr|pt)\.mydomain\.com$
# Create an environment variable to remember the language:
RewriteRule (.*) - [QSA,E=LANGUAGE:%1]
# Now check if the LANGUAGE is empty (= doesn't exist)
RewriteCond %{ENV:LANGUAGE} ^$
# If so, create the default language (=es):
RewriteRule (.*) - [QSA,E=LANGUAGE:es]
# Change the root folder of the spanish language:
RewriteCond %{ENV:LANGUAGE} ^es$
# Change the root folder:
RewriteRule ^/?$ /public/www/index.php

То, что я не получаю, это: почему вы не можете просто написать один раз для всех языков и сделать что-то вроде:

RewriteCond %{HTTP_HOST} ^(us|fr|pt)\.mydomain\.com$
# Create an environment variable to remember the language:
RewriteRule (.*) - [QSA,E=LANGUAGE:%1]
# Now check if the LANGUAGE is empty (= doesn't exist)
RewriteCond %{ENV:LANGUAGE} ^$
# If so, create the default language (=es):
RewriteRule (.*) - [QSA,E=LANGUAGE:es]

# WHATEVER THE LANGUAGE ADD IT TO THE URI:
RewriteRule (.*) $1?language=%{ENV:LANGUAGE} [QSA]

Так что теперь представьте, что кто-то печатает:

Все указывают на один и тот же кусок кода и вам просто нужно обработать это в файле Php: посмотрите на переменную $_GET['language'] и прочитайте хороший файл "перевода".

Это всего лишь совет, чтобы помочьВы делаете меньше работы для очень надежного приложения!


Надеюсь, это поможет!


[Редактировать 1]

Вот последние вещи, которые вы можете поместить в файл .htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^(us|fr|pt)\.mydomain\.com$
    RewriteRule (.*) - [QSA,E=LANGUAGE:%1]
    RewriteCond %{ENV:LANGUAGE} ^$
    RewriteRule (.*) - [QSA,E=LANGUAGE:es]
    RewriteRule (.*) $1?language=%{ENV:LANGUAGE} [QSA]
</IfModule>

[Редактировать 2]

Мои последние правила делают это:

Не меняетпуть вообще .

Этот меняет путь:

RewriteCond %{HTTP_HOST} ^(us|fr|pt)\.mydomain\.com$
RewriteRule (.*) - [QSA,E=LANGUAGE:%1]
RewriteCond %{ENV:LANGUAGE} ^$
RewriteRule (.*) - [QSA,E=LANGUAGE:es]
RewriteCond %{ENV:LANGUAGE} ^es$
RewriteRule ^/?$ /public/www/index.php

Так что это должно дать:

2 голосов
/ 02 марта 2012

попробуйте

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^es\.
RewriteCond %{REQUEST_URI} !^/es
RewriteRule ^(.*)$   http://domain.com/es_ES/$1 [P,L]
...