Как перевести /en/file.php в file.php? Lang = en в Apache htaccess - PullRequest
3 голосов
/ 11 февраля 2009

Я пишу многоязычный сайт. У меня есть несколько файлов на сервере, как:

/index.php
/files.php
/funny.php

И хотел бы добавить поддержку языка, поместив код языка в URL, например:

http://mywebsite/en/index.php

будет перенаправлять на:

http://mywebsite/index.php?lang=en

А

http://mywebsite/en/files.php

будет перенаправлять на:

http://mywebsite/files.php?lang=en

Я бы хотел добавить больше языков, например:

http://mywebsite/ch-ZH/index.php

И мне бы хотелось, чтобы это работало только для файлов с расширением php и php5. Остальные файлы должны быть такими же, как они.

Так, например, когда я пойду по адресу

http://mywebsite/ch-ZH/index.php

Я бы хотел, чтобы мой PHP распознал текущий путь

http://mywebsite

и НЕ

http://mywebsite/ch-ZH

Это необходимо для меня, потому что в моем PHP-коде я ссылаюсь на текущий путь и хотел бы, чтобы они работали так, как они работают сейчас.

Не могли бы вы написать, как подготовить файл htaccess на Apache для соответствия этим критериям?

Ответы [ 3 ]

5 голосов
/ 11 февраля 2009

Попробуйте это:

RewriteEngine on
RewriteRule ^([a-z]{2}(-[A-Z]{2})?)/(.*) $3?lang=$1 [L,QSA]

А для проблемы текущий путь необходимо знать, как разрешаются относительные URI: Относительные URI разрешаются клиентом из базового URI, который является URI ( не путь к файловой системе! ) текущего ресурса, если не указано иное.

Таким образом, если в документе есть URI /en/foo/bar и относительный путь ./baz, клиент разрешает это до /en/foo/baz (поскольку, очевидно, клиент не знает о действительной файловой системе путь).
Для разрешения ./baz на /baz необходимо изменить базовый URI, что можно сделать с помощью HTML-элемента BASE.

1 голос
/ 11 февраля 2009

Если вы не хотите использовать ModRewrite, вы можете поместить символические ссылки в веб-папку (ln -s . en) и проверить URL в PHP.

1 голос
/ 11 февраля 2009

Что-то вроде этого должно сработать,

RewriteEngine on
RewriteRule ^(.[^/]+)/(.*).php([5])?$ $2.php$3?lang=$1 [L]

Это будет соответствовать только файлам .php и .php5, поэтому остальные файлы не будут затронуты.

...