У меня есть сайт, который недавно изменил свою структуру страницы, чтобы добавить возможность для нескольких языков (/en/
для английского, /fr/
для французского).У меня есть следующие правила перезаписи в my server {}
блоке:
try_files $uri $uri/ @abc;
location @abc {
if ($uri !~ "^/(.*)\/(.*)$") {
rewrite ^/(.*)$ /en/$1 permanent;
}
rewrite ^/(.*)\/(.*)$ /index.php?lang=$1&page=$2;
}
rewrite ^/$ /en/$1 permanent;
Это немного беспорядок, но я не могу выполнить то, что мне нужно:
- Все ссылки должны быть проверены, чтобы увидеть, существует ли файл (работает)
- Все «старые» ссылки, такие как
/abc
, должны быть от 301 до /en/abc
(работает, но кажется хакерским) - Корень сайта должен быть перенаправлен на
/en/
(работает) - Ссылки в формате
/en/abc
должны быть отправлены на index.php
как ?lang=$1&page=$2
(включая /en/abc/123
, где abc/123
равно $2
и en
равно $1
).$2
может иметь любую длину, например abc/123/456
То, что у меня «кажется» работает нормально, но на подстраницах abc/123
, похоже, для $1
установлено en/abc
и $2
до 123
, что нежелательно и приводит к ошибке 404, так как скрипт не может найти страницу 123
.Заранее спасибо за любые ответы!