Nginx Rewrites for Custom PHP Framework

Я перемещаю настраиваемое приложение mvc php в рабочую среду на ubuntu и nginx и борюсь с структурой перезаписи приложения. Цель состоит в том, чтобы взять URL-адреса, ориентированные на контроллер, например:

    domain.com/index.php?controller=store&action=search&category=3

, и превратить их в визуально приятные URL-адреса, подобные этому

    domain.com/store/search/category/3

. Как и в других фреймворках, приложение выполняет все запросы через файл index.php, который ищет соответствующий контроллер для обработки запрос. Чтобы справиться с этим, я добавил начальное правило перезаписи, например:

    location / {
           try_files $uri $uri/ @rewrite;
        }

В модуле перезаписи, который у меня есть:

    location @rewrite {

        rewrite ^/(.*)$ /index.php?op=$1 last;   }

Приведенный выше код - это начало, которое приближает меня к доступу к нашим контроллерам через более чистые URL-адреса, но я не приблизился к более широкой стратегии, чтобы справиться с этим. Любая помощь будет принята с благодарностью, я просмотрел большую часть Интернета, и ресурсы, с которыми я сталкиваюсь, кажутся слишком расплывчатыми, слишком конкретными или устаревшими.

0
задан 11 June 2017 в 07:34
1 ответ

В документации для rewrite директивы есть пример, который помогает решить вашу проблему:

Синтаксис: rewrite regex replace [flag];

Но если эти директивы помещены в папку / download / , последний флаг следует заменить на break , иначе nginx сделает 10 циклов и вернет ошибку 500:

 location / download / {
  перезаписать ^ (/ download /.*)/ media /(.*)\..*$ $ 1 / mp3 / $ 2.mp3 break;
  перезаписать ^ (/ download /.*)/ audio /(.*)\..*$ $ 1 / mp3 / $ 2.ra break;
  возврат 403;
 }
 

Нам нужно изменить /index.php?controller=store&action=search&category=3 в правильную форму для строки замены , получить переменные из / store / search / category / 3 , превратив его в регулярное выражение и не забудьте использовать break внутри location .

  • Если все четыре части являются переменными:

     rewrite ^ / (. *) / (. *) / (. *) / (. *) $ /Index.php?controller=$1&action=$2&$3  = Перерыв в 4 доллара;
     
  • Если категория является фиксированной частью URL:

     rewrite ^ / (. *) / (. *) / Category /(.*)$ /index.php?controller=  $ 1 & действие = $ 2 & категория = перерыв 3 $;
     
0
ответ дан 5 December 2019 в 08:01

Теги

Похожие вопросы