FilesMatch - как работает?

berkut

Новичок
FilesMatch - как работает?

Из доки apache core толком ничего не понял, как работает директива FilesMatch. Насколько я понял, сначала идут все преобразования, вычисляется файл, к которому апач должен обратиться, потом проверяется FilesMatch. Так вот непонятная проблема: в корне virtual host лежит .htaccess
Код:
<FilesMatch "^item$">
    ForceType application/x-httpd-php
</FilesMatch>
На одном хостинге, запрос domain.tld/item/1/2 обрабатывается файлом document_root/item, а на другом, этим файлом обрабатываются только запросы domain.tld/item и domain.tld/item/ , запрос domain.tld/item/1/2 выдаёт 404
Какие директивы в httpd.conf влияют на это? Как он всё-таки работает, этот filesmatch
 

Фанат

oncle terrible
Команда форума
пачетай в деталях "регулярные выражовывания для чайников"
 

berkut

Новичок
Фанат
причём тут это? Во-первых это не даёт ответа на вопрос, к _чему_ применяется рег. выражение ^item$. Из доки, я понял, что, при запросе к domain.tld/item/1/2, выражение должно применятся к "2". Но не понятно при таком запросе, будет-ли применяться FilesMatch из .htaccess в корне "сайта".
Так-же, знания рег выражений, никак не даст ответа, почему на одном хосте это работает так, а на другом по другому
 

berkut

Новичок
1. domain.tld/item/1/2 обрабатывается файлом document_root/item
2. domain.tld/item/1/2 выдаёт 404
 

Фанат

oncle terrible
Команда форума
офигеть
оказывается, сервер у нас обрабатывает домен в запросе.
как трогательно.

API?
 

berkut

Новичок
ну ступил, домен приписал, суть не меняется(/item/1/2). если уж придираться, то домены разные.
api чего не въехал
 

Фанат

oncle terrible
Команда форума
api пэхапэ
хотя, наверное, если на ForceType не ругается, то модуль.

если работает с твоим паттерном, то получается, что он по частям разбирает запрос...
странно это все
 

hermit_refined

Отшельник
разбирайтесь с проблемой по частям.
если создать item.php и обращаться к /item.php/1/2 - что происходит?..
 

Gorynych

Посетитель PHP-Клуба
berkut

FilesMatch должен действовать на имена файлов, если у Вас случается 404, то есть подозрение, что попытки запроса к файлу с именем "item" не происходит, и, соответственно, правило не применяется.

я так понимаю, что все "схема" должна работать в два шага:

1) преобразовывать запросы вида /.../item/.../ в запрос к /.../item + параметры

2) запрос к /.../item должен обрабатываться как запрос к PHP-сценарию

может проще сделать правило, преобразующее запросы вида /.../item/.../ в запрос к /.../item.php + параметры?
 

berkut

Новичок
к сожалению никто так и не объяснил и не ткнул в инфу, о том как детально работает FilesMatch
hermit_refined а почему работает /item.php/1/2 - это работает, даже если вообще удалить этот .htaccess?

Ещё вопрос: директива ForceType application/x-httpd-php должна работать только в случае, когда php-модуль апача?

Gorynych как вариант можно переписать всё с использованием modrewrite, и внести изменения в скрипты, т.к. используют _SERVER['PATH_INFO'], но в первую очередь хочется разобраться с filesmatch - хочу всё знать:).
 

Gorynych

Посетитель PHP-Клуба
berkut

/item.php/1/2 работает потому, что Апач сам выделяет item.php, как обращение к файлу
 

hermit_refined

Отшельник
к сожалению никто так и не объяснил и не ткнул в инфу, о том как детально работает FilesMatch
see httpd.apache.org
но он вам тут не нужен.
Files вполне достаточно.

вообще, шаманить на расстоянии без знания версии апача, настроек, и т.п. очень сложно, так что не обессудьте.
могу ещё раз ткнуть пальцем в небо -
Код:
<Files "item">
    ForceType application/x-httpd-php
    AcceptPathInfo On
</Files>
самое для меня загадочное - почему /item/ обрабатывается, а /item/1/2 - нет. возможно, вы ошибаетесь.
 

berkut

Новичок
странно, запостил пост сюда, а он пропал...
С директивой files и filesmatch наконец-то разобрался.
Попробывал "item" - не работает. Apache/1.3.31
 

hermit_refined

Отшельник
тогда совсем странно, а AcceptPathInfo беру назад.
С директивой files и filesmatch наконец-то разобрался.
т.е. у вас заработало или нет?..
если нет - обратитесь всё же к хостеру.
потому как - "не воспроизводится".
 

berkut

Новичок
нет, так и не работает. Я понял только к чему применяется правило в filesmatch. К хостеру обращаться не буду, они за это денег берут) Придётся под mod_rewrite переделать
 
Сверху