Я использую Iirf v2.0.RewriteCond Проверьте, существует ли файл в подкаталоге
У меня есть следующая структура каталогов:
/
/library
/library/index.php
/webroot
/webroot/images
/Iirf.ini
Где у меня есть папка библиотеки, которая содержит мое приложение, папку WebRoot (который содержит изображения, таблицы стилей и т.д.) и конфигурационный файл Iirf.ini.
Я хочу перенаправить все запросы в /library/index.php , если файл не существует под webroot.
например:
Request Response
/images/blah.png -> /webroot/images/blah.png
/news -> /library/index.php
Мои Iirf.ini конфигурации имеет:
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /library/index.php [L]
который перенаправляет все, чтобы /library/index.php
но у меня возникают проблемы при работе, как проверить, если REQUEST_FILENAME
существует в корневой директории.
Я смотрел this question, но у меня нет доступа к DOCUMENT_ROOT
. Это дает мне следующее (взято из журнала):
Thu Jul 15 11:46:21 - 760 - ReplaceServerVariables: VariableName='REQUEST_FILENAME' Value='C:\web\favicon.ico'
Thu Jul 15 11:46:21 - 760 - ReplaceServerVariables: in='%{DOCUMENT_ROOT}/webroot/%{REQUEST_FILENAME}' out='DOCUMENT_ROOT/webroot/C:\web\favicon.ico'
Любая помощь была бы принята с благодарностью.
--- EDIT -
Я обновил свой конфиг после более чтений и предложения Тима быть:
RewriteCond $0 !^/webroot
RewriteRule ^.*$ /webroot$0 [I]
RewriteCond $0 !-f
RewriteRule ^/webroot/(.*)$ /library/index.php [I,L,QSA]
И он проходит /library/index.php
правильно, но он по-прежнему Безразлично 'Проверить существующий файл (хотя он, кажется, говорит, что он делает).
Thu Jul 15 14:47:30 - 3444 - EvalCondition: checking '/webroot/images/buttons/submit.gif' against pattern '!-f'
Thu Jul 15 14:47:30 - 3444 - EvalCondition: cond->SpecialConditionType= 'f'
Thu Jul 15 14:47:30 - 3444 - EvalCondition: Special: it is not a file
Я думаю, что мне нужно связаться с автором фильтра.
Хм, как насчет 'RewriteCond% {APPL_PHYSICAL_PATH} $ 0 -f' в этом втором случае (относительный URL не путь_к_файл, это Wouldn Не работает ли в mod_rewrite? (Или вы определили '% {APPL_PHYSICAL_PATH}' действительно не то, что я надеялся?) –
Использование '% {APPL_PHYSICAL_PATH}' приводит к пути, подобному 'C: \ path \ to \ folder \ webroot/images/buttons/submit.gif', который, по вашему мнению, был бы прав, но он все еще терпит неудачу. –
Хм, (глядя на исходный код) он полагается на возвращаемое значение из функции Windows API «CreateFile», чтобы проверить, существует ли файл ... У чего не должно быть проблемы с поиском этого пути, поэтому я не Получи это, ба. –