переписать правило nginx - PullRequest
0 голосов
/ 23 марта 2011

Может кто-нибудь помочь мне с моим правилом перезаписи nginx. У меня такая проблема

если файл не найден на www.abc.com/name_dir/*, он будет перенаправлен на www.abc.com/name_dir/index.php.

например: не найден в www.abc.com/xxx/* перенаправить на www.abc.com/xxx/index.php не найден в www.abc.com/yyy/* перенаправить на www.abc.com/yyy/index.php не найден в www.abc.com/zzz/* перенаправить на www.abc.com/zzz/index.php не найден в www.abc.com/kk/* перенаправить на www.abc.com/kkk/index.php ... проблема у меня тысячи name_dir. У меня есть nginx.conf, как это

    if (-f $request_filename) {
      break;
    }
    if (-d $request_filename) {
      rewrite (^.+$) $1/
      break;
    }
    if (!-e $request_filename) {
      rewrite ^/xxx/(.*)$ /xxx/index.php?$1 last;
      rewrite ^.+?(/.*\.php)$ $1 last;
    }

В приведенной выше конфигурации только перенаправление name_dir xxx. Как переписать правило для перенаправления всех каталогов? Спасибо за вашу помощь

1 Ответ

2 голосов
/ 18 апреля 2011

Вы хотите использовать try_files для проверки на наличие файлов вместо операторов if здесь (потому что If - это зло в Nginx).

To для одного каталога, это будетНапример:

location /xxx/{
   try_files $uri $uri/ /xxx/index.php;
   index index.php
}

Сначала попробуйте попробовать URI как файл.Если это не сработает, он будет пытаться в качестве каталога.Если ни одна из них не работает, по умолчанию будет index.php из / xxx /.Дополнительная строка указателя не позволяет показывать пустую страницу, если вы переходите непосредственно к what.com/xxx

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

location ~* ^(/.*)/{
   try_files $uri $uri/ $1/index.php?$uri&$args;
   index index.php
}

Это должно получить полную структуру каталогов и направить ее к соответствующему индексу.

  • abc.com / yyy / nonexistant.php ==> abc.com/yyy/index.php
  • abc.com / yyy / zzz / nonexistant.php ==> abc.com/yyy/zzz/index.php

Если вы только хотите, чтобы второй пример перешел к yyy/index.php, используйте вместо этого этого регулярного выражения:

^(/.*?)/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...