РЕДАКТИРОВАТЬ: Я прошел и проверил это на одном из моих серверов.Это прекрасно работает для меня:
RewriteEngine On
RewriteRule ^sub-site/([a-z_]+)/([a-z0-9_-]+)$ /sub-site/index.php?locale=$1&page=$2
Это дает вам большую часть пути, но не выполняет перевод локали (en => en_EN), а просто доставляет локаль как естьPHP скрипт.Используя mod_rewrite, я бы рекомендовал RewriteMap;однако, если у вас только есть доступ к .htaccess (как на общем хосте), вы не можете использовать RewriteMap.
Итак, для выполнения перевода локали, я думаю, вы 'Лучше всего делать это на стороне PHP.Вы можете использовать одну из перечисленных ниже платформ или просто сделать это самостоятельно.
Если у вас есть доступ к конфигурации виртуального хоста, вы создадите текстовый файл, например:
en en_EN
fr fr_FR
ca fr_CA
Если этот файл находится в /path/to/localemap.txt, вы получите:
RewriteMap locales txt:/path/to/localemap.txt
RewriteRule ^sub-site/([a-z_]+)/([a-z0-9_-]+)$ /sub-site/index.php?locale=${locales:$1|en_EN}&page=$2
По умолчанию используется en_EN, если на карте ничего не найдено.
Надеюсьэто помогает!
Если вы просто используете .htaccess, то mod_rewrite легко сделает то, что вы хотите.
Возможно, вы захотите посмотреть RewriteMap для своих категорий или локали, хотя вы можете просто взять эту часть URL и использовать ее в качестве параметранепосредственно.Вот пример для начала:
RewriteRule /sub-site/([a-z_]+)/([a-z0-9_]+) /sub-site/index.php?locale=$1&page=$2
Вы действительно хотите сузить регулярные выражения, используемые, чтобы сделать их более специфичными для поддерживаемых вами локалей и категорий, но я думаю, что это хорошая отправная точка.
Другие PHP-фреймворки, особенно ориентированные на MVC, также предоставляют аналогичные функции маршрутизации URL.Примеры: