Apache 2.2错误:尝试提供目录,无重写

Apache 2.2错误:尝试提供目录,无重写

设置:Apache 2.2(Windows,win32)。

httpd.conf 片段:

Alias /custom /var/www/custom

DirectoryIndex index.html

<Location /custom>
    SetHandler custom_handler
    DirectoryIndex index.html
</Location>

<Directory /var/www>
    Allow From all
    Options +Indexes
    AllowOverride all
    DirectoryIndex index.html
</Directory>

还:

  • mod_dir,mod_rewrite 已激活
  • index.html 位于 /var/www/custom
  • 服务器进程 UID 可以读取 /var/www 中的所有文件/目录
  • Apache 服务监听所有接口
  • 自定义处理程序处理位置路径中的某些 URL,其他 URL 由文件系统提供;index.html 的处理方式与不存在处理程序时相同

问题:

  • 重写以位置路径开头的 URL 不起作用(未报告错误)
  • 尝试发球时http://服务器/自定义(没有结束斜线),发生以下情况:
    • Apache 重定向到http://服务器名称/custom/(到 ServerName 指令值)
    • “尝试提供目录”被写入 /var/www/custom/ 的错误日志
    • 返回 404 错误

如何处理上述情况?需要执行以下操作:

  • 当 ... 时提供 /var/www/custom/index.htmlhttp://服务器/自定义已输入,或
  • 重写某些 URL,例如

    重写规则 ^custom/$ /custom/index.html [L,R]

上述重写规则无论放在哪里(在 Location 内或外)都不起作用

答案1

您混合使用了几种将 URI 映射到文件系统一部分的不同方法,但它们无法协同工作。

首先,如果您的DocumentRoot/var/www,那么 AliasMap 就完全没有必要了。不过,从您的代码片段中看不出这一点。

其次,由于是一个目录,因此在引用它时应/var/www/custom使用指令。用于不是目录但您希望将其视为目录的东西。DirectoryLocation

要清除这些问题,请尝试像这样更改您的配置:

Alias /custom /var/www/custom  # ONLY if you don't have /var/www as DocumentRoot!

DirectoryIndex index.html

<Directory /var/www>
    Allow From all
    Options +Indexes
    AllowOverride all
</Directory>

<Directory /var/www/custom>
    SetHandler custom_handler
</Directory>

相关内容