Как изменить кодировку URL-адресов на сайте?

Здравствуйте! <br/> Я перенес свой сайт с WordPress на другой хостинг, включая перенос домена, импорт дампа базы данных и копирование файлов, а также внес изменения в файл wp-config.php. Сайт загружается без проблем. <br/> На старом хостинге был установлен плагин Cyr To Lat, благодаря которому все файлы в папке uploads имеют названия на латинице. Однако, среди множества файлов есть и такие, в названиях которых присутствует символ "№". На предыдущем хостинге URL таких файлов кодировался в ANSI, то есть отображение ссылки "*/dokument№1.pdf" преобразовывалось в "%B9", и конечный адрес становился "*/dokument%B91.pdf". На новом хостинге URL кодируется в UTF-8, и в этом случае символ "№" преобразуется в %E2%84%96, в результате чего ссылка выглядит как "*/dokument%E2%84%961.pdf". <br/> Из-за этого, все ссылки на файлы с символом "№" возвращают ошибку 404. Я заметил, что если вручную заменить "№" на "%B9", то документ скачивается без проблем. <br/> База данных на старом и новом хостингах использует кодировку UTF-8. Я не понимаю, где задается кодировка URL. <br/> Поделитесь, пожалуйста, советом, как решить проблему с символом "№"?
  • 29 октября 2024 г. 15:33
Ответы на вопрос 3
Проблема, с которой вы столкнулись, связана с тем, как символы кодируются в URL-адресах, а также с тем, как ваш сайт обрабатывает и хранит эти URL. Вот несколько шагов, которые могут помочь вам решить проблему с символом "№":

1. **Проверьте базу данных**: Убедитесь, что в вашей базе данных все записи, содержащие URL для файлов, также содержат правильную кодировку. Вам нужно выполнить поиск по таблицам вашей базы данных, чтобы найти и заменить все вхождения `"%E2%84%96"` на `"%B9"` (или на любой другой подходящий эквивалент), если вы хотите вернуться к старым URL.

   Например, вы можете использовать следующий SQL-запрос для обновления:
   ```sql
   UPDATE wp_posts SET guid = REPLACE(guid, '%E2%84%96', '%B9');
   UPDATE wp_posts SET post_content = REPLACE(post_content, '%E2%84%96', '%B9');
   ```

2. **Настройки плагина**: Поскольку на старом хостинге у вас был установлен плагин Cyr To Lat, проверьте, есть ли аналогичные плагины или настройки на новом хостинге, которые позволяют обрабатывать символы так, как вам нужно. Возможно, есть альтернативные плагины или настройки, которые позволят вам преобразовывать символы в URL на латиницу.

3. **Настройка .htaccess**: Убедитесь, что в файле `.htaccess` у вас нет правил, которые мешают обработке URL-адресов с символами. Если у вас есть пользовательские правила, попробуйте временно их отключить, чтобы проверить, не решит ли это проблему.

4. **Кодировка и настройки сервера**: Убедитесь, что ваш сайт правильно настроен на использование кодировки UTF-8. Попробуйте добавить следующие строки в файл `.htaccess`, чтобы убедиться, что сервер обрабатывает запросы в UTF-8:
   ```
   AddDefaultCharset UTF-8
   ```

5. **Обновление ссылок в контенте**: После переноса сайт может содержать старые ссылки в контенте, которые также нужно обновить. Используйте плагин для поиска и замены, чтобы заменить старые URL на новые в содержимом постов и страниц.

6. **Ручное исправление файлов**: Если есть не так много файлов с проблемными символами в именах, вы можете вручную переименовать их (менять символ "№" на его кодировку) через FTP или панель управления хостингом.

7. **Тестирование**: После выполнения вышеперечисленных шагов протестируйте URL-адреса на вашем сайте, чтобы убедиться, что они теперь работают корректно.

Если указанные шаги не решили проблему, возможно, потребуется более глубокий анализ конфигурации сервера и вашего сайта, а также изучение логов сервера на наличие ошибок.
%B9 - это код символа № в кодировке Windows-1251. 
Похоже, что имена файлов на диске у вас сохранены именно в ней. Надо перекодировать имена в UTF-8.
Не возьмусь утверждать со 100%-й уверенностью в вашем случае, но проблемы со ссылками на файлы, например, темы могут возникать при неправильном переносе. 

Современный вордпресс уже просто так между хостами лучше не таскать. Рекомендуют плагины наподобие Duplicator и WP All-in-one Migration. Они корректно работают с сериализованными данными в базе, что позволяет избежать ошибок в т.ч. с путями.
Похожие вопросы