nginx перезаписывает файл внутри виртуального каталога

#php #nginx #url-rewriting

#php #nginx #url-переписывание

Вопрос:

Моя структура папок следующая: у меня есть папка с именем, docs внутри которой у меня есть 2 файла: all_docs.php и level.php

у all_docs есть 2 параметра, и у меня есть это правило перезаписи:

 rewrite ^/doc-([^/]*)-([^/]*)/?$ /doc/all_docs.php?title=$1amp;lang=$2 last;
  

Что делает возможным URL, подобный

 all_docs.php?title=fashionamp;lang=en
  

чтобы выглядеть как:

 /doc-fashion-en/
  

Проблема в том, что я также хочу получить доступ level.php внутри папки doc, но
После перезаписи я не могу, потому что nginx запрашивает:

/doc-fashion-en/level.php который не существует

Я пытался перезаписать ^/doc-([^/])-([^/])/level.php /doc/level.php ?$args;

безуспешно, level.php имеет некоторые параметры get, которые необходимо передать, вот почему я использовал $ args.

Буду признателен за любую помощь

Комментарии:

1. Как должен level.php выглядеть запрос на? /doc-title-lang/level.php ?

2. Да, точно, исключая такие параметры, как level.php?lang=usamp;volume = 4 и т.д.

Ответ №1:

Эти правила перезаписи должны работать для вас:

 rewrite ^/doc-([^/] )-([^/] )/?$ /doc/all_docs.php?title=$1amp;lang=$2 last;
rewrite ^/doc-[^/] -[^/] /level.php(.*)$ /doc/level.php$1 last;
  

Рассмотрите возможность использования вместо * , когда вы уверены, что там должен быть хотя бы один символ. На самом деле, ^/doc-([^/]*)-([^/]*)/?$ совпадает /doc-- . Не уверен, что это намеренно.