Могу ли я сделать Apache, работающий в Windows, чувствительным к регистру?

Файловые системы Windows (FAT, NTFS) не заботятся о регистре имен файлов (без учета регистра). Следовательно, программы, такие как веб-сервер Apache, работающие в Windows, обрабатывают файлы без учета регистра.

Когда вы создаете веб-сайты в Windows, вы непреднамеренно создаете ссылки и т. д., которые не соответствуют регистру фактического имени файла. Обычно вы замечаете эти ошибки только после того, как развернете веб-сайт в файловых системах с учетом регистра (по умолчанию в Linux, UNIX, ...).

Теперь я хотел бы знать, есть ли способ избежать подобных ошибок, заставив веб-сервер Apache как-то заботиться о регистре, даже если файловой системе все равно. Я имею в виду, что NTFS различает прописные и строчные буквы в именах файлов, поэтому теоретически должна быть возможность проверить, совпадают ли имена файлов с учетом регистра.


Я знаю, что такие соглашения об именах, как "Использовать только строчные буквы", могут помочь избежать подобных проблем, но это не помогает с существующими файлами и менее удобно :-)

Кроме того, не использовать Windows не вариант. Я не использую Windows добровольно, и в этом случае запуск Apache на другой платформе невозможен.


person f3lix    schedule 03.02.2009    source источник


Ответы (7)


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

В качестве обходного пути вы говорите, что должны разрабатывать в Windows. Как насчет установки Linux на виртуальный ПК. Существует несколько бесплатных программ для виртуальных машин, таких как VirtualBox и Microsoft Virtual PC. Таким образом, вы можете сопоставить свою среду разработки со средой развертывания.

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

person Rob Prouse    schedule 03.02.2009
comment
У меня также была идея использовать программное обеспечение для виртуализации (VMware и т. д.) для запуска Apache в Linux, и я ожидал получить такой ответ. Но что меня беспокоит, так это то, что ИМХО это должно быть возможно в Windows ... - person f3lix; 03.02.2009
comment
Этот ответ по-прежнему на 100% верен или за 7 лет все изменилось к лучшему? Потому что я не могу найти решение xampp, localhost, database tables - person Wanjia; 08.09.2017
comment
@Wanjia спрашивал 6 месяцев назад, но в эти дни я, вероятно, запустил бы Apache в контейнере Docker или, возможно, установил и запустил бы Apache в подсистеме Windows для Linux (WSL). То же самое с таблицами базы данных... - person Rob Prouse; 23.05.2018

Согласно документации Apache, это невозможно, поскольку нечувствительность к регистру встроена в ОС Windows. Но вы можете «обратить проблему» и сделать сервер Apache под Linux/Unix нечувствительным к регистру. Просто добавьте следующие директивы в ваш .htaccess:

RewriteEngine On
RewriteMap lowercase int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lowercase:$1} [R,L]

См. документацию здесь.

person Luca    schedule 03.10.2014

Так что теперь это можно сделать в Windows 10 >https://www.windowscentral.com/how-enable-ntfs-treat-folders-case-sensitive-windows-10

Файл fsutil.exe SetCaseSensitiveInfo C:\folder\path enable

person Robert    schedule 15.04.2019

NTFS действительно поддерживает имена файлов с учетом регистра. Он используется и включается службами Microsoft для UNIX. Это контролируется в реестре. Погуглите ключ реестра ObCaseinSensitive. например блог msdn и, в частности, эту статью Microsoft KB: kb817921

person an0nym0usc0ward    schedule 03.02.2009
comment
Проблема в том, что он работает не очень хорошо, и многие программы для Windows его не поддерживают. - person BobbyShaftoe; 03.02.2009

Это не проблема, которую вы можете решить так, как хотите. Вам нужно загрузить свои файлы, заставив нижний регистр. Вы избежите проблемы конфликта имен в Windows, поэтому, если вы создаете что-то в Windows, вам не придется об этом беспокоиться. Теперь вам нужно использовать какую-то программу проверки ссылок, чтобы найти URL-адреса, содержащие заглавные буквы, а затем заменить их эквивалентом в нижнем регистре.

Тем не менее, Райан Гуилл сделал хорошее предложение включить CheckSpelling.

person BobbyShaftoe    schedule 03.02.2009
comment
CheckSpelling не помогает, так как вы можете использовать его только для скрытия ошибок в файловой системе с учетом регистра. Если, например, я заархивирую свой веб-сайт, чтобы дать его кому-то для чтения в автономном режиме, я не могу сказать ему установить Apache с включенной функцией CheckSpelling, чтобы не спотыкаться о мертвые ссылки. - person f3lix; 03.02.2009
comment
Вот почему вам нужно сделать первую часть того, что я предложил. - person BobbyShaftoe; 03.02.2009

Кажется, вы можете включить mod_spelling с помощью директивы CheckSpelling on в файле конфигурации Apache.

Информация и контекст находятся здесь: http://bytes.com/topic/apache/answers/608164-apache-case-sensitive-urls

Изменить: приведенное выше было процитировано для обратной стороны вопроса, извините. Кто-то задает тот же вопрос, что и вы после этого, но никогда не отвечает, работает ответ или нет. Посмотрев дальше, кажется, что в самом apache нет флага или каких-либо настроек для этого. Некоторые люди предлагают попытаться сделать файловую систему чувствительной к регистру, что кажется возможным, но похоже, что это вызывает больше проблем, особенно с другими программами, которые этого не ожидают.

В целом, если вы не можете разрабатывать на другой ОС и не можете изменить все существующие имена файлов на строчные (что понятно), то не похоже, что у вас действительно много вариантов. Единственное предложение, которое я хотел бы дать вам на этом этапе, — это попытаться получить тестовую среду, настроить ее точно так же, как вашу производственную среду, и протестировать как можно больше перед отправкой в ​​​​производство.

Извините за недопонимание и что я не могу больше помочь.

person Ryan Guill    schedule 03.02.2009
comment
Вопрос в этой теме: Как сделать apache чувствительным к регистру? а mod_spelling исправляет орфографические ошибки в URL-адресах, которые могли быть введены пользователями, игнорируя заглавные буквы и допуская до одной орфографической ошибки. Проще говоря, это для пользователей Linux, которым нужно поведение Windows... - person f3lix; 03.02.2009
comment
Форум, на который вы ссылаетесь, не предлагает решения, позволяющего сделать Apache в Windows чувствительным к регистру. Только наоборот; нечувствителен к регистру в unix-системах. - person Bouke; 03.02.2009
comment
нельзя ли сделать наоборот? На форуме упоминается то, что вы ищете ниже, где был этот ответ, который я цитировал, но человек так и не вернулся и не сказал, сработало это или нет. Ты это пробовал? Я все еще ищу, хотя. - person Ryan Guill; 03.02.2009

Windows МОЖЕТ быть установлен в режим учета регистра. Том NTFS также поддерживает режим с учетом регистра. Если вы установили совместимость с UNIX ранее, ваша Windows, возможно, уже перешла в режим с учетом регистра. Я полагаю, что в реестре есть переключатель, но я забыл, где он находится, поэтому я не могу понять, что это для вас. :-(

person Lingfeng Xiong    schedule 21.05.2012