设置: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 激活
- /var/www/custom 中的 index.html
- 服务器进程 UID 可以读取 /var/www 中的所有文件/目录
- Apache 服务监听所有接口
- 自定义处理程序处理位置路径中的某些 URL,其他从文件系统提供;index.html 被处理为好像没有处理程序存在
问题:
- 重写以位置路径开头的 URL 不起作用(未报告错误)
- 当尝试服务http://server/custom(不关闭斜杠)时,会发生以下情况:
- Apache 重定向到http://ServerName/custom/(到 ServerName 指令值)
- “尝试服务目录”被写入 /var/www/custom/ 的错误日志
- 返回 404 错误
上述情况如何处理?以下是必需的:
- 输入http://server/custom时提供 /var/www/custom/index.html ,或
重写某些 URL,例如
重写规则 ^custom/$ /custom/index.html [L,R]
上面的重写规则不起作用,无论它放在哪里(在位置内或位置外)
您混合了几种将 URI 映射到文件系统的一部分的不同方式,但它们并不能一起工作。
首先,如果你的
DocumentRoot
is/var/www
,那么 AliasMap 是完全没有必要的。不过,这从您的代码段中并不清楚。其次,由于是一个目录,所以在引用它时
/var/www/custom
应该使用该指令。用于不是目录但您想表现得好像它们是目录的东西。Directory
Location
要清除这些要点,请尝试像这样更改您的配置: