【发布时间】:2010-12-12 12:29:39
【问题描述】:
有没有办法在不使用 .htaccess 文件的情况下将规则应用于单个目录而不是其子目录?我希望 /var/www/html 按日期顺序排序。但是,在子目录中,我不希望应用此规则。
现在,我在 /var/www/html 目录标签中有 IndexOrderDefault Descending Date。
【问题讨论】:
标签: apache configuration subdirectory
有没有办法在不使用 .htaccess 文件的情况下将规则应用于单个目录而不是其子目录?我希望 /var/www/html 按日期顺序排序。但是,在子目录中,我不希望应用此规则。
现在,我在 /var/www/html 目录标签中有 IndexOrderDefault Descending Date。
【问题讨论】:
标签: apache configuration subdirectory
您可以使用 DirectoryMatch 指令精确匹配该目录(并且仅匹配该目录):
<DirectoryMatch "^/www/var/html$">
IndexOrderDefault Descending Date
</DirectoryMatch>
它使用正则表达式来匹配目录路径。请参阅http://httpd.apache.org/docs/2.0/mod/core.html#directorymatch 了解更多信息。
【讨论】:
对于遇到此问题的用户:请参阅https://issues.apache.org/bugzilla/show_bug.cgi?id=49809(Apache 错误 49809)。由于某些莫名其妙的原因,Apache 无法将 $ 识别为行尾锚。
【讨论】:
Rich Leland 的回答在 Apache 2.4.43 下对我不起作用。这是什么工作:
<DirectoryMatch '^/var/www/html/?$'>
IndexOrderDefault Descending Date
</DirectoryMatch>
区别在于/?$,它允许请求“可能以斜杠结尾,也可能不以斜杠结尾”。请参阅 2.4 手册中的<@987654321@>。
但请注意,上述内容仅适用于诸如 IndexOrderDefault 之类的指令,这些指令仅适用于目录请求。 (我认为手册在这一点上并不清楚。)如果你想添加一个指令,适用于对目录中常规文件 contained 的请求,那么你需要这样的东西:
<DirectoryMatch '^/var/www/html(?:/[^/]*)?$'>
IndexOrderDefault Descending Date
SetOutputFilter DEFLATE
</DirectoryMatch>
请注意,仅当所有子目录请求都以斜杠终止时才有效,当<@987654322@> 保留其默认设置时有效。
所有这些都需要 Apache 2.3.9 或更高版本。 “在 2.3.9 之前,[<DirectoryMatch>] 隐式应用于子目录(如<@987654323@>)并且无法匹配行尾符号($)。”
【讨论】:
DirectoryMatch 参数。没有?
DirectoryMatch 指令的参数需要匹配完整的文件路径,包括文件名。奇怪,恕我直言。这显然不是 Directory 指令的工作方式。