Фигури за деца - Научете за 2D и 3D фигури

Предговор

Аз съм много неофит по отношение на уеб сървърите. Настройвам сървър на Apache2 и в момента преглеждам документацията.

Забелязах, че , , и всяка директива има съответна <*Match> директива: , и съответно. Разликата на повърхността е достатъчно очевидна:

  • <*Match> директивите приемат регулярния израз като аргумент
  • Директивите, които не съвпадат, вземат за аргумент обикновен низ или глобус в стил черупка.

Любопитното е, че директивите за несъвпадение могат също да им бъде даден регулярен израз като техен аргумент, ако той е предшестван от „~“. Следователно следващите два реда трябва да са еднакви:

# From the Apache2 docs  ...   ...  

Въпроси

Това, което бих искал да знам, е дали има някакви фини или ключови разлики, за да сме наясно с тези на Apache core документите не споменават. The раздел споменава една фина разлика:

Съвместимост

Преди 2.3.9, тази директива имплицитно се прилага към поддиректории (като ) и не може да съответства на символа в края на реда ($). В 2.3.9 и по-късно, само директориите, които съответстват на израза, са засегнати от приложените директиви.

Освен това бих искал да знам:

  • Има ли някакви други разлики между директивите Match и non-Match?
  • Коя директива е по-предпочитана, когато се изисква регулярен израз?
  • Всяка друга информация, която смятате за уместна?

Бележки

  • и са на същото ниво на сливане
  • Въпреки че не е изрично споменато, може да използва именувани групи и препратки, точно като .

Разликата е в разрешения тип параметри:

 ...  

срещу

 ...  

DirectoryMatch е супермножество, функционално, тъй като ще можете да кодирате всеки път като регулярно изражение. Обратното не е вярно.

Directory ~ вероятно е късно добавяне. Въз основа на ангажимент, намерен в хранилището (commit 07b82419b59d1bb7ba8860b86a2d381d5d1090bc на ноември 1996 г.), този случай е добавен в Apache 1.2

DirectoryMatch след това беше добавен в Apache 1.3 (ангажиране a318749e61fda612e883a9ea594459a4517166b8 на юли 1997 г.) с по-богат набор от функции.

И документацията, актуализирана в този ангажимент, ясно казва, че трябва да предпочитате версията на съвпадението, когато използвате регекс:

  
-would match directories in /www/ that consisted of three numbers.

+would match directories in /www/ that consisted of three numbers. In +Apache 1.3 and later, it is reccomended to use + instead.

(този израз "препоръчително е да се използва DirectoryMatch" е премахнат по-късно при коммит на август 1997 г.)

DirectoryMatch все още е по-добър, защото Directory ~ се обработват само след "нормално" Directory изявления и DirectoryMatch ви позволява да улавяте данни, които впоследствие можете да използвате.

Когато използвате регулярно изражение, бих подкрепил Match variant, тъй като става по-ясно, че използвате регулярен израз, а не конкретен случай на несъвпадащия вариант. Освен малките разлики по-горе, това обаче няма да направи огромна разлика.

АКТУАЛИЗИРАНЕ всъщност вероятно няма промени в резултата, тъй като кодът прави същото:

static const char *dirsection(cmd_parms *cmd, void *mconfig, const char *arg) { ... if (!strcmp(cmd->path, '~')) { cmd->path = ap_getword_conf(cmd->pool, &arg); if (!cmd->path) return ' block must specify a path'; r = ap_pregcomp(cmd->pool, cmd->path, AP_REG_EXTENDED|USE_ICASE); if (!r) { return 'Regex could not be compiled'; } } else if (thiscmd->cmd_data) { /*  */ r = ap_pregcomp(cmd->pool, cmd->path, AP_REG_EXTENDED|USE_ICASE); if (!r) { return 'Regex could not be compiled'; } } 

Точно същото обаждане до r = ap_pregcomp(cmd->pool, cmd->path, AP_REG_EXTENDED|USE_ICASE); и в двата случая.

  • 2 „DirectoryMatch е супермножество“ - въпреки че ОП специално сравнява и , не . До Apache 2.3.9, е може би супермножество, защото поддържа $ regex котва, докато не бях. (Това може да е и причината препоръката да се използва DirectoryMatch бе премахната в по-ранните документи?)
  • 2 'DirectoryMatch все още е по-добър, защото Directory ~ се обработват само след "нормално" Directory изявления и DirectoryMatch ви позволява да улавяте данни, които впоследствие можете да използвате. "- но както отбелязва OP, тези директиви са еднакви и в двете отношения.
  • 1 Съгласен съм с това DirectoryMatch е по-лесен за четене и следователно за предпочитане (над Directory ~). Докато документите не посочват изрично това, DirectoryMatch се използва във всички скорошни примери (напр. на страницата Config Sections) и Directory ~ никога не получава споменаване. Документите обаче изрично посочват, че подобно наречените LocationMatch и FilesMatch са за предпочитане пред съответните ~ версия на тези директиви.
  • @MrWhite DirectoryMatch не подкрепи $ котва преди Apache 2.3.9? Откритите от мен ангажименти са свързани с Apache 1.2 / 1.3, досега.
  • 1 Да, както е посочено в ОП (от 2.4 документа), докато ранните примери за дори включваше котва в края на низа. Да, виждам, че тези ангажименти са от 1.2 / 1.3 - добро копаене! :) Това е посочено и в Apache 1.3 документи, когато DirectoryMatch беше въведена. Имаше и промени в Apache 1.3 (от 1.2) по отношение на това как контейнерите на регулярните изрази (т.е. и току-що въведените ) бяха обединени.

Има ли някакви други разлики между директивите Match и non-Match?

Не е строга разлика между двете версии на регулярни изрази ( и ), но някои директиви, като AllowOverride и AllowOverrideList, са разрешени само в обикновена (нерегекс) контейнер. Това изключва и двете и .

Справка:
https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride

Налично само в раздели
AllowOverride важи само в раздели, посочени без регулярни изрази, не в , или раздели.

е работил за вас: Charles Robertson | Искате ли да се свържете с нас?