1

私は解決するのに苦労してきた問題を抱えているようです。ここで少しお役に立てれば幸いです。と を使用しているダンプ サイトがmod_autoindexありFancyIndexingます。

ファイルにFancyIndexingアイコンが定義されてい.htaccessます。また、いくつかの php スクリプトを介してファイルを渡すためにも使用mod_rewriteします (ファイル拡張子によって異なります)。

ファイル拡張子が で一致する場合を除いて、すべてがうまく機能しますRewriteRule.Apacheは、指定されたものではなく、デフォルトのアイコンのみを表示します.

すべてのFancyIndexingリソースは/imgindexディレクトリ上にあり、すべてのビューアは/viewersディレクトリ上にあります。

これは.htaccessファイルの関連部分です(現在調整中のため、最適化されていません):

Options +Indexes
IndexOptions +XHTML +HTMLTable +FancyIndexing +FoldersFirst +SuppressHTMLPreamble +IconsAreLinks +IgnoreCase +NameWidth=*
IndexIgnore *~ imgindex viewers favicon.ico
HeaderName /imgindex/header.html
ReadmeName /imgindex/footer.html

# ------ Fancy Indexing ----------
AddIcon /imgindex/image.png .jpg .jp2 .jif .jpeg .tiff .tif .pict .pct .bmp .gif .png .psd .tga .ai .indd .fh* .fh10 .xcf .svg
AddIcon /imgindex/app.png .app
AddIcon /imgindex/movie.png .mov .mpg .mpeg .m2v .avi .divx .xvid .swf .wmv .wma .wm* .ram .rm .ogm .ogv
AddIcon /imgindex/txt.png .txt .text .log
# etc, etc.
DefaultIcon /imgindex/text.png

# ------ Rewriting --------
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^viewers/(.*)$
RewriteCond %{REQUEST_URI} !^imgindex/(.*)$
RewriteRule ^(.*).(css|cs|cpp|h|hpp|pas|xml|js|asm|inc|as|sh|bat|cmd|html)$ /viewers/view_source.php?file=$1.$2&%{QUERY_STRING} [NC,L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^viewers/(.*)$
RewriteCond %{REQUEST_URI} !^imgindex/(.*)$
RewriteRule ^(.*).(jpg)$ /viewers/viewjpg.php?file=$1.$2&%{QUERY_STRING} [NC,L]

# (etc, etc.)

私が言ったように、アイコンを除いて、すべてがうまくいくようです. 上記の場合、すべての.css, .cs, .cpp、(など)、およびすべてのファイルは、そのファイル タイプ ( で定義) のアイコンではなく、 で.jpg定義されたアイコンを使用します。DefaultIconAddIcon

RewriteRuleそのファイルタイプに一致する を削除すると、正しいアイコンが表示されます。

これは正常で、予想される動作ですか? もしそうなら、それをオーバーライドする方法はありますか?

よろしく、

4

1 に答える 1

1

わかりました、理由がわかったようです。mod_rewrite は、何らかの理由 (バグ?) で、mod_autoindex が使用するすべての apr_read_dir() 呼び出しを再マッピングします (私は mod_autoindex ソースコードを調べました)。マッパーモジュールのサブリクエストと見なされるため、回避策として次を追加しました。

RewriteCond %{IS_SUBREQ} false

RewriteRules のそれぞれに対して、それは魔法のように機能しました。もちろん、これは回避策にすぎません。実際にサブリクエストで rewriterule が必要な場合、これはうまくいかない可能性があるからです。

これは mod_autoindex のバグだと思います。なぜなら、アイコンや説明のファイル名が、実際に出力データを印刷するために使用されるものとまったく異なる必要があるという理由はまったくないからです。

ただし、それにはいくつかのあいまいな理由がある可能性があります。

于 2011-02-06T23:49:37.017 に答える