Некоторые изображения не найдены (404) на localhost
Я только что перенес установку WordPress с домена на локальный сервер. Выполнил все стандартные шаги: скопировал файлы, экспортировал БД и заменил domain.com
на localhost
, обновил wp-config.php
и сбросил постоянные ссылки. Все страницы и пользовательские правила перезаписи работают, но некоторые изображения возвращают 404.
Когда я проверяю эти изображения на реальном домене, все работает нормально, но что-то выглядит странно; если посмотреть URL изображения, он указывает на такой путь:
http://domain.com/wp-content/uploads/2013/08/IMG_0425-185x185.jpg
Но этого файла не существует! Я проверил папку uploads через FTP и файла там нет, существует только IMG_0425-185x185-150x150.jpg
. Обратите внимание, что 185x185
это часть оригинального имени файла, а 150x150
добавлено WordPress.
На локальном сервере изображение не отображается (404), что логично.
Почему изображение отображается на домене, когда его даже не существует? Может WordPress как-то преобразует изображение в сгенерированную миниатюру? Почему это не работает на локальном сервере в таком случае?
Дополнение:
Вот что совсем не понятно. Как это возможно? Может быть, кэш как-то влияет?
Как видите, никаких следов IMG_0425-185x185.jpg
в папке (??), но IMG_0425-185x185-150x150.jpg
существует.

Изменение значений home
и siteurl
в таблице wp_options
к сожалению недостаточно. В ваших записях всё ещё будут использоваться URL-адреса не из локального окружения (http://domain.com
), из-за чего сайт не будет отображаться корректно на localhost.
После того как вы скачали и импортировали базу данных на локальный сервер, выполните следующие шаги:
- Скачайте скрипт поиска и замены в базе данных от Interconnect IT здесь
- Разархивируйте файл и поместите папку в корневую директорию вашего локального сервера, где установлен WordPress, затем переименуйте папку в
replace
(скриншот) - Перейдите в созданную папку через браузер (например:
http://localhost/wordpress/replace
) и вы увидите инструмент поиска/замены - Дальше всё довольно интуитивно: введите старый URL в поле
search for…
, а новый URL в полеreplace with…
Вы можете нажать кнопку dry run в разделе actions, чтобы увидеть, какие изменения будут произведены, до выполнения скрипта. После завершения не забудьте удалить папку /replace/
.

Если его нет в вашем FTP-клиенте — значит, его нет на вашем сервере — и он не будет отображаться на вашем сайте. Скорее всего, это связано с кэшированием в вашем браузере. Вы пробовали очистить кэш или выполнить полную перезагрузку страницы? Механизм перезаписи WordPress не будет использовать миниатюру, если исходного изображения нет. Файл .htaccess
просто загрузит index.php
, который вернёт ошибку 404.
Ещё одна вещь, которую стоит проверить — убедитесь, что URL указывает туда, куда вы думаете. WordPress хранит все ссылки на изображения в базе данных в виде абсолютных URL. И если вы не сделали поиск и замену при переносе сайта, эти ссылки не обновятся. Вы упомянули, что переносили сайт, и вполне возможно, что изображение загружается со старого сервера.

Посмотрите изображение, которое я добавил. Вот в чем странность. На домене изображение отображается, хотя URL ведет на несуществующее изображение. Я провел поиск/замену, как всегда делаю, и раньше такой проблемы не было. Это странно. Я отключил кеш, но все равно получаю 404. Повторял этот процесс несколько раз — результат тот же.

Вы очистили кеш браузера? Какие плагины у вас установлены? Хотя сложно представить, чтобы кеширующий плагин делал такое — все, что я видел, используют кеширование вывода только для разгрузки БД и построения PHP DOM. Но ассеты все равно загружаются с сервера.

Я в процессе пересоздания всех миниатюр с помощью http://wordpress.org/plugins/ajax-thumbnail-rebuild/. 2 из 259, 3 из 259... посмотрим, как пойдет. Я отключил плагин Super Cache на локальном сервере, но проблема сохраняется.

Удачи. У меня были хорошие результаты с этим вариантом, если это не поможет.

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

Возможно, это проблема с правами доступа. Перейдите в папку wp-content через консоль и введите:
chmod -R 767 uploads
