Назад | Перейти на главную страницу

Перенос файлов Windows с плохой практикой на сервер Linux с учетом регистра

Я переношу все данные со старого FTP-сервера Windows в среду Linux и столкнулся с некоторыми проблемами.

Люди, которые ранее загружали файлы (обычно простые html-файлы и изображения), следовали очень плохой практике использования заглавных букв некоторых символов в именах папок и файлов, а затем вводили имена файлов с неправильным регистром в свой html-код. Они также рассылали гиперссылки на эти файлы в нижнем регистре. Поскольку сервер был оконным и нечувствительным к регистру, он просто прощал это, и все работало нормально независимо от этого.

Теперь, когда файлы перенесены в файловую систему с учетом регистра. Эти гиперссылки не работают, и неправильно закодированные файлы HTML не будут работать.

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

Повлияет ли это также на теги href в html-коде? Есть ли другие серьезные последствия этого, о которых я могу не думать?

Я просто хотел узнать несколько других мнений и вариантов. Есть ли лучший способ решить эту проблему?

Спасибо, парни!

Мне очень повезло с исправлением орфографии, предоставляемым Apache mod_speling которое имеет то преимущество, что вам не нужно изменять существующие имена файлов / каталогов или существующий код HTML, но ваш опыт может отличаться:

Он выполняет свою работу, сравнивая каждое имя документа в запрошенном каталоге с запрошенным именем документа без учета регистра и (необязательно) допуская до одной ошибки написания (вставка / пропуск / перестановка символов или неправильный символ). Список составляется со всеми именами документов, которые были сопоставлены с использованием этой стратегии.

Если после сканирования каталога

  • соответствующий документ не найден, Apache продолжит работу как обычно и вернет ошибку «документ не найден».
  • обнаруживается только один документ, который "почти" соответствует запросу, затем он возвращается в виде ответа перенаправления.
  • было найдено более одного документа с близким соответствием, затем список совпадений возвращается клиенту, и клиент может выбрать правильного кандидата.

Включите настройкой:

CheckSpelling On 

в вашем httpd.conf в блоке VirtualHost и / или Directory (или даже в файле .htaccess).

Вы можете ограничить исправление орфографии изменениями нижнего / верхнего регистра только с помощью:

CheckCaseOnly On 

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

Что бы я сделал: напишите сценарий bash, который преобразует все файлы и папки в нижний регистр. Просто чтобы убедиться, что все в нижнем регистре, без заглавных букв.

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

Вы можете использовать такой простой сценарий bash (назовем его переименованием:

#!/bin/bash

echo -n "Enter full path: "
read FULLPATH

for item in `find $FULLPATH -depth`
do
    DST=`dirname "${item}"`/`basename "${item}" | tr '[A-Z]' '[a-z]'`
    if [ "${item}" != "${DST}" ]
    then
        [ ! -e "${DST}" ] && mv -T "${item}" "${DST}" || echo "${item} was not renamed"
    fi
done

Я бы создал резервная копия первая (на всякий случай из всех файлов и папок).

Просто сохраните скрипт, сделайте его исполняемым (chmod + x rename.sh), а затем ЗАПУСТИТЕ его. Он запросит полный путь (где находятся файлы / папки). Затем он будет рекурсивно искать все файлы и папки и преобразовывать те, которые содержат CAPS, в более низкие.

ОБНОВИТЬ:

Если вы не хотите изменять ссылки и ссылки в html-файлах (те, которые отмечены CAPS), вы можете использовать следующий подход:

RewriteEngine on
RewriteBase /
RewriteMap lowercase int:tolower
RewriteCond $1 [A-Z]
RewriteRule ^/?(.*)$ /${lowercase:$1} [R=301,L]

Помните, что приведенные выше правила перезаписи предназначены для использования внутри конфигурационного файла apache (конфигурация vhost), а не в файле .htaccess.

Для других вариантов вы также можете проверить эту ссылку: https://www.askapache.com/htaccess/rewrite-uppercase-lowercase/

Вы должны написать тестовый скрипт для проверки всех ваших HREF (и навигационных ссылок) после добавления правил htaccess, чтобы переписать все запросы наLower. Этого было бы достаточно, чтобы проверить, как предлагаемое изменение может повлиять на другие области вашего веб-сайта. Если вы переписываете все запросы, я могу думать только о том, что произойдет с URL-адресами такого типа. protocol://username:password@webserver.tld/login тип запросов, если у вас есть какая-либо часть вашего сайта в помещении с базовой аутентификацией.