设置: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
使用指令。用于不是目录但您希望将其视为目录的东西。Directory
Location
要清除这些问题,请尝试像这样更改您的配置:
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>