Файл без точек выдает ошибку 404 в IIS

#iis #dotless

#iis #без точек

Вопрос:

Я успешно использую .less файлы на моем сервере разработки Cassini (с dotless) в течение нескольких недель, но когда я публикую на своем локальном сервере IIS, они выдают ошибки 404. Подключение моего отладчика к IIS не приводит к исключениям. Я также перезапустил свой пул приложений IIS и сервер.

Есть идеи?

Ответ №1:

Похоже, у вас отсутствует тип mime в IIS.

Для IIS7 добавьте следующее в свой web.config :

 <system.webServer>
    <staticContent>
        <mimeMap fileExtension=".less" mimeType="text/css" />
    </staticContent>
</system.webServer>
  

Для IIS6 вы можете сделать (при условии, что у вас есть доступ администратора по протоколу RDP):

 cscript adsutil.vbs set W3SVC/1/Root/MimeMap ".less, text/css"
  

Где /1/ — номер IIS сайта.

Комментарии:

1. ты справился, спасибо, чувак! Stackoverflow снова приходит на помощь.

2. Большая любовь. Я люблю мгновенные решения.

3. Для IIS6 мне пришлось использовать cscript c:/Inetpub/AdminScripts/adsutil.vbs set W3SVC/1/Root/MimeMap ".less, text/css"

4. Я просто не получаю результатов с этим исправлением. Это сводит меня с ума. С cassini все работает, но когда я публикую в IIS 7, это не работает.

5. @nlinus — вы также могли бы рассмотреть возможность установки mimetype с помощью appcmd — technet.microsoft.com/en-us/library/cc725608 (v = ws.10).aspx — Я использовал как добавление узла веб-сервера web.config, так и appcmd.

Ответ №2:

Просто добавляю (довольно поздно, я понимаю) свои два бита к этому обсуждению.

Я только что столкнулся с теми же симптомами, и ранее упомянутое исправление у меня не сработало. Однако в конечном итоге я нашел другую причину этих симптомов и решение для этого.

Ответ 404 в моем случае содержал следующее сообщение в теле ответа:

/* Произошла ошибка. Обратитесь к журналу или просмотру на локальном компьютере. */

Похоже, это показатель того, что файл less действительно был найден и запрос обрабатывался dotLess (сообщение можно найти в исходном коде dotLess), но во время обработки запроса произошло исключение FileNotFoundException.

Я отследил проблему в инструкции @import, которая ссылалась на .файл без точек, который таинственным образом отсутствовал на сервере IIS, хотя он присутствовал на сервере разработки.

Оказалось, что для действия сборки для этого проблемного файла .less было установлено значение None, а не Content, как для всех других файлов .less в моем проекте.

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

Ну, я добавил файл как .css-файл, затем решил импортировать его в .файл less и, таким образом, переименовал его в .less (поскольку .css является подмножеством .less, но less не импортирует файлы css). Я повторил процесс с новым файлом .css и обнаружил, что проблема воспроизводима.

Похоже, что Visual Studio изменяет действие сборки с Content на None за кулисами как неожиданный побочный эффект переименования .css в .less. Таким образом, переименованный файл .less не публикуется на сервере IIS.

Комментарии:

1. спасибо 1, столкнулся с той же проблемой при преобразовании некоторых фреймворков в .less, ни за что на свете не мог понять, почему он выдает значение 404, пока я не удалил все файлы из VS publish..

2. Ага, меня тоже достало. Забыл добавить новый файл .less в SVN, который должен был быть @import-ed

3. Вау, мне потребовалось слишком много времени, чтобы разобраться. Моя основная таблица стилей не компилировалась в мою сборку less, и я понятия не имел, почему. Спасибо.