我希望使用Apache的mod_speling
模块使用不区分大小写的URL,但这会产生不需要的“多个选项”列表,而Apache文档说明
设置时,此指令将拼写更正的操作限制为大小写更改。其他可能的修正不会被执行。
我正在使用Apache 2.2.16 Unix全新安装进行测试,但我仍遇到与2008年提交的问题完全相同的问题。
当checkCaseOnly指令打开时,Apache列出了一些“多项选择”(状态代码300),这是意外(并且不想要)的行为!
我在httpd.conf
:
CheckSpelling on
CheckCaseOnly on
使用mod_speling
的第一个指令,第二个指令仅限于大小写修正
我做错了什么?
答案 0 :(得分:10)
要启用mod_speling(通过Location或VirtualHost),请使用指令:
CheckSpelling On
如果你想要的只是不区分大小写,请使用:
CheckCaseOnly On
您还需要启用RewriteEngine:
RewriteEngine On
答案 1 :(得分:9)
TLDR:CheckCaseOnly由于自2014年10月起六年来一直未发现的错误而中断。
我知道这是一个老问题,但我遇到了同样的问题。此更新旨在帮助其他人解决同样的问题。
这个问题的当前答案是不正确的,因为OP正确使用mod_speling,但是有一个错误。
https://issues.apache.org/bugzilla/show_bug.cgi?id=44221
潜在的问题是apache人在修复此行为方面存在分歧,因为它会更改模块的其余部分。对于像6年这样的事情,这仍然没有固定。
答案 2 :(得分:8)
在使用Apache 2.2的Ubuntu 12.04 LTS上,我做了以下内容:
在speling.conf
中创建${APACHE}/mods-available
以提供配置选项。
<IfModule mod_speling.c>
CheckSpelling On
CheckCaseOnly On
</IfModule>
将speling.conf
和speling.load
链接到已启用的模块目录${APACHE}/mods-enabled
中:
# cd ../mods-enabled
# ln -s ../mods-available/speling.conf speling.conf
# ln -s ../mods-available/speling.load speling.load
重启服务器。
# service restart apache2
答案 3 :(得分:1)
你真的想要不区分大小写的URL吗?
为什么不强迫小写网址,像这样呢?
RewriteEngine On
RewriteMap lc int:tolower
RewriteRule (.*) ${lc:$1} [R]