1

メイソンを使用している間、私は本当に奇妙な振る舞いをします、例えば:

私は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>

4

2 に答える 2

2

〜1年後、私は誤って答えを見つけたので、私は自分の発見を共有したいと思いました:

問題は、Mason(Perl)が「404file not found」を提供する代わりに、Web上の別のファイルのコード自体を表示し、それを停止する方法がわからなかったことです。例:インデックスをリクエストすると、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にはMasonENVで/indexを実行するための構成がないため(ファイル拡張子なし)、単にコードが表示されます...

おかしい:)しかし、解決策は、「Options FollowSymLinksMultiViews」を「OptionsFollowSymLinks-MultiViews」に変更し、MultiViewsを使用しないことでした。

次の応答ヘッダーを見ながら、この解決策を見つけました。

Content-Location    index.html
Vary    negotiate

「MultiViews」は私には何の意味もありません。5年前のコピーペーストで、あるWebサーバーから別のWebサーバーに移動しただけだったからです:)

ありがとう、リッキー。

于 2012-09-14T13:29:20.650 に答える
0

Webサーバーが自動的になぜ

  1. indexをindex.htmlに変換します
  2. それでもそれを特別に扱うことを主張します(それは明らかにPerlHandlerにフィードされません)私は正直にわかりません(おそらく答えはあなたの構成の他の場所にあります)。

ただし、回避策として、どのファイルをディスパッチするかを定義した正規表現に「index」(または「^ index」)を追加してみることができますHTML::Mason::ApacheHandler。私はそれが少し醜いことを認めます。

ページをロードしてindexその逐語的なコードを表示したら、ページ情報をチェックアウトすると、エンコーディングは文字通りであるというのは正しいplain/textですか?おそらく、サフィックスのないファイル(末尾が終わっていないファイル.htmlなど)がリモートブラウザにまったく送信されないように、いくつかのmime設定を構成する必要がありますplain/text

于 2011-04-18T13:45:15.243 に答える