1

我似乎有一个我一直在努力解决的问题。我想在这里得到一点帮助。我有一个转储站点,我正在使用mod_autoindexFancyIndexing.

我在我的文件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文件都将使用 中定义的图标DefaultIcon,而不是其文件类型(定义在 中AddIcon)的图标。

如果我删除RewriteRule与该文件类型匹配的文件,则会显示正确的图标。

这是正常的预期行为吗?如果是这样,有什么方法可以覆盖它?

问候,

4

1 回答 1

1

好的,看来我找到了原因。mod_rewrite 出于某种原因(一个错误?)重新映射了所有 apr_read_dir() 调用,mod_autoindex 使用了这些调用(我最终查看了 mod_autoindex 源代码)。由于它被认为是映射器模块上的子请求,因此我只是添加了一个解决方法:

RewriteCond %{IS_SUBREQ} false

对于每个 RewriteRules,它都神奇地起作用了。当然,这只是一种解决方法,因为如果您确实需要对子请求进行重写,这可能不适合您。

我确实认为这是 mod_autoindex 上的一个错误,因为绝对没有理由图标和/或描述的文件名应该与实际打印输出数据的文件名不同。

不过,这可能有一些不为人知的原因。

于 2011-02-06T23:49:37.017 回答