2011-02-06 5 views
1

私は解決するために苦労している問題があるようです。私はここで少し助けが好きです。 私はmod_autoindexFancyIndexingを使用しているダンプサイトを持っています。mod_rewriteがmod_autoindexに正しいファイルタイプアイコンが表示されないようにします

私のFancyIndexingアイコンは、私の.htaccessファイルに定義されています。私もmod_rewriteを使用してファイルをいくつかのPHPスクリプト(ファイルの拡張子に応じて)に渡します。

ファイル拡張子が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のすべてのファイルは、ファイルタイプ(AddIconで定義されている)の代わりに、DefaultIconで定義されたアイコンを使用します。

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

これは正常な動作ですか?もしそうなら、それを上書きする方法はありますか?

よろしく、

+0

"mistery"(または私が間違っていること)に追加すると、ファイルの1つ(AddDescription "whatever"ファイル名)に説明を追加しようとしましたが、 RewriteRuleで。完全に別の方法で動作します。 – Jcl

答えて

1

mod_rewriteは、mod_autoindexが使用するすべてのapr_read_dir()呼び出しを再マッピングする何らかの理由(バグですか?)です(mod_autoindexソースコードを見てしまいました)。 RewriteRulesのそれぞれに

RewriteCond %{IS_SUBREQ} false 

、それは魔法のように働いていた:それは回避策として、マッパーモジュール上のサブリクエストと考えられていますので、私はちょうど追加しました。もちろん、これは単なる回避策です。実際にサブリクエストに書き換えが必要な場合、これはうまくいかない可能性があります。

これはmod_autoindexのバグと思われます。なぜなら、アイコンや説明のファイル名は実際に出力データを印刷するのと同じでなければならないからです。

それにはいくつかの不明な理由があるかもしれません。

関連する問題