Директива Apache Location для динамического содержимого не работает, если вложенный путь - PullRequest
2 голосов
/ 01 февраля 2012

Я использую Apache 2.2x.Большая часть контента генерируется через mod_perl.Таким образом, это динамический контент, который не имеет файловой системыИдеальное использование .

Конфигурация Apache:

<Location /finance_module1>
  SetHandler perl-script
  PerlResponseHandler Finance::Module1
</Location>

<Location /finance/module2>
  SetHandler perl-script
  PerlResponseHandler Finance::Module2
</Location>

Module1 работает и показан здесь, чтобы показать, что моя установка работает иначе.

Module2 не работает,Apache говорит: «Файл не существует: / home / joe / www / htdocs / finance».Единственное различие между конфигурациями модуля состоит в том, что местоположение Module2 содержит несколько косых черт (то, что я называю вложенным путем).

Об ошибке «Файл не существует»: Конечно, он не существует -это местоположение, а не файл или каталог.Так почему же это происходит?

Я хотел бы иметь возможность использовать пути с несколькими слешами, потому что у меня много модулей mod_perl, и было бы неплохо классифицировать для целей управления.Для одного тривиального экземпляра robots.txt может просто сказать:

Disallow: /finance/

В документации Apache конкретно указано, что директивы не должны отображаться в файловую систему и хорошо подходят для динамически генерируемого контента.

Что я делаю не так?Есть ли обходной путь?(Помимо очевидного «просто не делай этого»).

Спасибо.

Ответы [ 2 ]

3 голосов
/ 06 марта 2012

Отвечая на мой вопрос, для кого-то еще, кто интересуется тем же.

Краткий ответ, используйте LocationMatch.

В приведенном выше примере, скажем, URL-адреса / finance / module1 и / finance / module2. Наличие пути «finance /» позволяет сконфигурировать все обработчики финансов как группу в ситуациях, когда это желательно.

Например:

<LocationMatch /finance/.*>
  SetHandler perl-script
  PerlAccessHandler foo
</LocationMatch>

<Location /finance/module1>
  SetHandler perl-script
  PerlResponseHandler Finance::Module1
</Location>

<Location /finance/module2>
  SetHandler perl-script
  PerlResponseHandler Finance::Module2
</Location>
0 голосов
/ 02 февраля 2012

Возможно, небольшая опечатка?

<Location /finance_module1>

против

<Location /finance/module2>

Не уверен, что это проблема.

Возможно, это (добавьте в httpd.conf)

Alias /finance "path-to-files"
<Directory "path-to-files">
  Options +Indexes
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

Тогда попробуйте скрипт.Вы могли бы также сделать там пустую папку?

...