Понимание аргументов функции слияния конфигурации каталога модуля Apache - PullRequest
1 голос
/ 29 октября 2011

Я пишу модуль Apache, и у меня возникла путаница относительно поведения функции слияния конфигурации каталогов.

В источнике для mod_example параметры помечены так:

static void *x_merge_dir_config(apr_pool_t *p, void *parent_conf, void *newloc_conf);

Но с учетом таких директив:

<Location /path/>
  MyOption value-from-path
</Location>

<Location />
  MyOption value-from-root
</Location>

Когда эта функция вызывается в результате доступа к http://localhost/path/,, эта функция вызывается с parent_conf из /path/ и newloc_conf из /, что в точности противоположно тому, что я ожидал на основе названий этих параметров. Я бы описал "/" как родительский элемент и "/ blog /" как дочерний / подчиненный / наиболее конкретный путь.

Я пытаюсь выяснить, какая настоящая история здесь. Apache использует слово «родитель» иначе, чем я? Mod_example ошибочно назвал эти параметры? Я просто в замешательстве?

1 Ответ

1 голос
/ 06 декабря 2011

Насколько я понимаю, аргументы "parent" / "new" больше связаны с порядком, в котором Apache применяет директивы конфигурации, чем с путевыми именами, связанными с этими директивами. Как вы знаете, он начинается с отдельного сервера, затем с vhost, затем с разделами Location и т. Д., Причем более поздние директивы в этом списке переопределяют более ранние. И задача обратного вызова слияния состоит в том, чтобы вычислить результат переопределения материала в «parent» с материалом в «newloc».

Если несколько разделов Location соответствуют запросу, они применяются в порядке их появления в файле конфигурации . Поэтому, когда MyOption value-from-root объединен, это «новая» часть конфигурации - она ​​применяется после value-from-path - так что она находится в аргументе «newloc», и конфигурация вычисляется до этой точки, включая value-from-path, находится в «родительском».

(Кроме того, если ваш модуль не имеет необычного поведения слияния, это означает, что вы, вероятно, захотите поменять местами порядок двух разделов Location. Второй, для root, будет всегда применяться, и предположительно предотвратит видимый эффект первого из них.)

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