【问题标题】:Apache mod_speling case insensitive URLs issueApache mod_speling 不区分大小写的 URL 问题
【发布时间】:2010-08-10 14:29:51
【问题描述】:

我想使用 Apache 的 mod_speling 模块创建不区分大小写的 URL,但这会产生不需要的“多个选项”列表,而 Apache 文档说

设置后,此指令将拼写更正的操作限制为小写/大写更改。未执行其他可能的更正。

我正在全新安装的 Apache 2.2.16 Unix 上对此进行测试,但我仍然遇到与 2008 年提交的完全相同的问题。

当 checkCaseOnly 指令打开时,Apache 列出了一些“多项选择”(状态代码 300),这是意外(并且不想要)的行为!

我的httpd.conf有这个:

CheckSpelling on
CheckCaseOnly on

第一个指令使用mod_speling,第二个指令仅限于大小写更正

我做错了什么?

【问题讨论】:

  • 你解决过这个问题吗?我遇到了同样的问题。
  • 2020 年 2 月 25 日更新 - 上面 user1647075 提到的 Apache 错误仍未修复。使用 mod_speling 模块时,您仍然会面临多项选择 300 错误。

标签: apache case-sensitive mod-speling


【解决方案1】:

TLDR:CheckCaseOnly 因截至 10/2014 六年多未修复的错误而损坏。

我知道这是一个老问题,但我遇到了同样的问题。此更新旨在帮助其他人解决同样的问题。

此问题的当前答案不正确,因为 OP 正确使用了 mod_speling,但存在错误。

https://issues.apache.org/bugzilla/show_bug.cgi?id=44221

根本问题是 apache 人员在修复此行为方面存在分歧,因为它改变了模块的其余部分。这在大约 6 年的时间里一直没有得到解决。

【讨论】:

  • 当他们在这里发布他们的问题时,OP 实际上对同一个错误报告做出了贡献(事实上,这个问题部分是他们的 bugzilla 帖子的逐字复制) - 不知道为什么这不是当时被引用?
【解决方案2】:

要启用 mod_speling(通过 Location 或 VirtualHost),请使用指令:

CheckSpelling On

如果您只想不区分大小写,请使用:

CheckCaseOnly On

您还需要启用 RewriteEngine:

RewriteEngine On

【讨论】:

  • “您还需要启用 RewriteEngine” - 对此有什么参考吗? AFAIK mod_speling 和 mod_rewrite 之间从来没有依赖关系,简单地启用重写引擎并没有真正意义 IMO? (虽然,正如其他答案中所述 - 和问题 - 启用 mod_speling 不是这里的问题。)
【解决方案3】:

在使用 Apache 2.2 的 Ubuntu 12.04 LTS 上,我执行了以下操作:

  1. ${APACHE}/mods-available 中创建speling.conf 以提供配置选项。

    <IfModule mod_speling.c>
        CheckSpelling On
        CheckCaseOnly On
    </IfModule>
    
  2. speling.confspeling.load 链接到启用的模块目录${APACHE}/mods-enabled

    # cd ../mods-enabled
    # ln -s ../mods-available/speling.conf speling.conf
    # ln -s ../mods-available/speling.load speling.load
    
  3. 重启服务器。

    # service restart apache2
    

【讨论】:

    【解决方案4】:

    在阅读了 user1647075 的 answer 关于这是一个不太可能修复的已知 Apache 错误之后,我决定我最好的选择是通过更新我的 Apache 配置以显示 404 错误页面来向用户隐藏“多个选项”页面对于 300 个状态代码:

    ErrorDocument 300 /404.htm
    

    当然,您也可以创建自定义错误页面,而不是重复使用 404 错误页面。

    希望此解决方法有所帮助。

    【讨论】:

      【解决方案5】:

      您真的想要不区分大小写的 URL 吗?
      为什么不像这样强制使用小写 URL?

      RewriteEngine On
      RewriteMap lc int:tolower
      RewriteRule (.*) ${lc:$1} [R]
      

      看看http://www.issociate.de/board/post/265865/make_URL

      【讨论】:

      • 事实上,现在我已经尝试过了,这是各种错误。甚至这里的 rewriteRule 实际上也不正确...
      • 具有讽刺意味的是,这与example as posted in the Apache docs 相同,尽管该页面顶部有一条警告指出:“请注意,这些示例中的许多示例都不会改变......”。这肯定是这里的情况——它是不完整的。 (或“错误”,取决于您如何看待它。)如果没有条件检查请求的 URL 是否包含大写字母,则此指令将导致重定向循环。
      • 还要注意RewriteMap指令只能在服务器配置(servervirtualhost上下文)中定义,即。 不是 .htaccess.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多