Конфигурация Mason и Apache, загрузка файлов, которые не существуют - PullRequest
1 голос
/ 18 апреля 2011

У меня действительно странное поведение при использовании Mason, например:

У меня есть файл index.html (который содержит теги масона, такие как <% $var %> hello).

Когда япри просмотре http://bla.com/index.html переменная переводится во время компиляции.

Но при переходе к http://bla.com/index.

наблюдается странное поведение, хотя нет файла с именем index (только index.html) он по-прежнему загружает index.html, и весь код отображается в виде обычного текста, включая <% ... %> !!!

Что я неправильно настроил?

это моя конфигурация Apache:

<VirtualHost *:80>
        ServerAdmin webmaster@abc.com
        ServerAlias abc.com www.abc.com
        ServerName abc.com


        DocumentRoot /var/www/abc.com
        DirectoryIndex index.html

        <Directory "/var/www/abc.com/">
                Options FollowSymLinks MultiViews
                AllowOverride All

                Order allow,deny
                allow from all
        </Directory>

        SetHandler perl-script
        PerlModule HTML::Mason::ApacheHandler
        PerlSetVar MasonUseObjectFiles 1   

        <LocationMatch "(\.html|\.txt|\.pl|\.js)$">
                SetHandler perl-script
                PerlHandler HTML::Mason::ApacheHandler
        </LocationMatch>

        <LocationMatch "(\.m(html|txt|pl)|dhandler|autohandler)$">
                SetHandler perl-script
                PerlHandler Apache::Constants::NOT_FOUND
        </LocationMatch>

Ответы [ 2 ]

2 голосов
/ 14 сентября 2012

Через год я случайно нашел ответ, поэтому я хотел поделиться своими выводами:

Проблема заключалась в том, что Мейсон (Perl) отображал сам код другого файла в Интернете вместо предоставления "404файл не найден "и я понятия не имел, как его остановить.Например: при запросе индекса он показывает код index.html

Решение состоит в том, что в моей конфигурации Apache было следующее:

<Directory "/var/www/my_dir/">
                Options FollowSymLinks MultiViews
                AllowOverride All

                Order allow,deny
                allow from all
        </Directory>

Видимо, "MultiViews" активируется посредством mod_negotiation.c, который заставляет сайт искать шаблон следующего наилучшего соответствия в случае, если файл не найден на сервере.(так, по адресу www.site.com/index он нашел index.html)

Но поскольку в Apache нет конфигурации для выполнения / индексации в Mason ENV (без расширения файла), он просто отображал код ...

Забавно :), но решением было изменить «Опции FollowSymLinks MultiViews» на «Опции FollowSymLinks -MultiViews» и не использовать MultiViews.

Нашел это решение, увидев следующие заголовки ответа:

Content-Location    index.html
Vary    negotiate

«MultiViews» не имеет для меня никакого значения, так как это была копия-вставка 5 лет назад, которую я просто перенес с одного веб-сервера на другой:)

Спасибо, Рики.

0 голосов
/ 18 апреля 2011

Почему веб-сервер автоматически

  1. переводит индекс в index.html
  2. все еще настаивает на том, чтобы относиться к нему специально (он, очевидно, не передает его в PerlHandler, как следует)честно говоря, не знаю (возможно, ответ находится в другом месте вашей конфигурации).

Однако вы можете в качестве обходного пути попытаться добавить «индекс» (или, скорее, «^ индекс») крегулярное выражение, определяющее, какие файлы следует отправлять в HTML::Mason::ApacheHandler.Я признаю, что это немного некрасиво.

Правильно ли я понимаю, что после загрузки страницы index и отображения этого дословного кода, после проверки информации о странице, кодировка буквально plain/text?Возможно, вам нужно настроить некоторые параметры MIME, чтобы файлы без суффиксов (файлы, не заканчивающиеся на .html и т. Д.) Вообще не отправлялись в удаленный браузер, даже если plain/text?

...