Пока не забыл, запишу лечение назойливой проблемы с Wordpress’ом под виндой.
Симптомы
Через админку загружаем какой-то файл в пост, например картинку. Все прекрасно грузится, превьюшки для картинки создаются, но при обращении к самой картинке (прямой линк на исходный файл) получаем ошибку 500.
Причины и лечение
При проверке у загруженного файла прописаны права для IUSR (учетка, из под которой работает PHP), но не было прав для Network Service (от ее имени работает IIS). Т.е. сам веб-сервер просто не получает права доступа к файлу и выдает ошибку. Смотрится это странно, т.к. у превьюх все в порядке и при создании в этом каталоге все файлы должны наследовать права от каталога (а у него-то всё на месте).
Но в том и загвоздка, что при загрузке файлов в PHP они сначала загружаются в промежуточный каталог, указанный в php.ini (настройка upload_tmp_dir), и по умолчанию это C:\Windows\Temp, а уже потом копируется приложением PHP в целевой каталог. При этом копируются права доступа этого каталога, и они не заменяются. Потому и лечение простое: даем Network Service все нужные права на временный каталог.