Проблема нечувствительных к регистру URL в Apache mod_speling - PullRequest
16 голосов
/ 10 августа 2010

Я хочу, чтобы URL-адреса без учета регистра использовались модулем mod_speling Apache, но при этом создаются нежелательные списки «множественных опций», в то время как документация Apache гласит:

Когда установлено, эта директива ограничивает действиеисправления орфографии в нижний / верхний регистр.Другие возможные исправления не выполняются.

Я тестирую это на новой установке Apache 2.2.16 Unix, но все еще сталкиваюсь с теми же проблемами, что и в 2008 году.

Это неожиданное (и нежелательное) поведение, когда Apache перечисляет несколько «множественных вариантов выбора» (код состояния 300), когда включена директива checkCaseOnly!

У меня это есть в моем httpd.conf:

CheckSpelling on
CheckCaseOnly on

Первая директива, в которой используется mod_speling, вторая директива, ограничивающая только исправлениями случаев

Что я делаю не так?

Ответы [ 5 ]

10 голосов
/ 30 сентября 2011

Чтобы включить mod_speling (по Location или VirtualHost), используйте директиву:

CheckSpelling On

Если все, что вам нужно, это регистр нечувствительности, используйте:

CheckCaseOnly On

Вам также нужно включить RewriteEngine:

RewriteEngine On
9 голосов
/ 23 октября 2014

TLDR: CheckCaseOnly не работает из-за ошибки, которая не исправлялась более шести лет по состоянию на 10/2014 г.

Я знаю, что это старый вопрос, но я столкнулся с той же проблемой.Это обновление, чтобы помочь другим с той же проблемой.

Текущие ответы на этот вопрос неверны, так как ОП правильно использует mod_speling, но есть ошибка.

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

Основная проблема заключается в том, чтоЛюди apache не согласны по поводу исправления этого поведения, потому что оно изменяет остальную часть модуля.Это оставалось незафиксированным около 6 лет.

8 голосов
/ 04 октября 2013

На Ubuntu 12.04 LTS с использованием Apache 2.2 я сделал следующее:

  1. Создайте speling.conf в ${APACHE}/mods-available, чтобы предоставить параметры конфигурации.

    <IfModule mod_speling.c>
        CheckSpelling On
        CheckCaseOnly On
    </IfModule>
    
  2. Ссылка 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
    
  3. Перезагрузите сервер.

    # service restart apache2
    
1 голос
/ 27 мая 2011

Вы действительно хотите, чтобы без учета регистра URL?
Почему бы просто не вводить строчные URL, как это?

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

Посмотрите на http://www.issociate.de/board/post/265865/make_URL

0 голосов
/ 14 сентября 2018

После прочтения user1647075 ответа о том, что это известная ошибка Apache, которая вряд ли будет исправлена, я решил, что лучше всего было бы скрыть от пользователя страницу с несколькими вариантами, обновив конфигурацию Apache, чтобы показать страница ошибки 404 для 300 кодов состояния:

ErrorDocument 300 /404.htm

Конечно, вы также можете создать пользовательскую страницу ошибок вместо повторного использования страницы ошибок 404.

Надеюсь, этот обходной путь поможет.

...