Почему #include не работает на странице .asp в IIS7.5? - PullRequest
7 голосов
/ 15 октября 2010

Я видел похожий вопрос к этому, но мой немного отличается:

Я получаю прерывистые результаты с файлами #include, работающими на сервере IIS 7.5 (R2008 V2). Мои включения работают, только если они находятся в той же папке, что и текущая страница .asp, или в подпапке текущей страницы. Это неудобно, так как я хотел бы держать их все в подпапке / lib, вне главной страницы.

Моя конфигурация: у меня есть папка с именем DCN, расположенная прямо под папкой wwwroot. В папке / lib внутри папки DCN находится несколько файлов, поэтому абсолютный путь - c: \ inetpub \ wwwroot \ dcn \ lib \ my_include_file.asp. Если я открою страницу ASP в папке DCN, я могу извлечь включаемые файлы из подпапки / lib. Однако, если я открою страницу ASP из папки DCN / Проблем (например, «DCN \ Trouble \ Search.asp»), и страница search.asp имеет строку, которая говорит:

<!--#include file="../lib/my_include_file.asp"-->

Включение не удается, и я получаю ошибку 500.

Я тоже пробовал:

<!--#include file="/lib/my_include_file.asp"--> 

с такими же результатами. То же самое с:

<!--#include file="/DCN/lib/my_include_file.asp"-->

Я изменил косые черты на обратные, с теми же результатами. Я даже пошел, чтобы попробовать:

 <!--#include file="c:\inetpub\wwwroot\dcn\lib\my_include_file.asp"-->

(из чистого отчаяния), но я все еще получаю те же результаты.

Если я создаю подпапку в папке dcn \ problem, я могу включить в нее файлы, но, очевидно, это не идеально.

Любые предложения будут с благодарностью. Я не могу не думать, что это что-то тривиальное. Заранее спасибо!

Ответы [ 3 ]

7 голосов
/ 15 октября 2010

Yots правильный, звучит как родительские пути отключены.Если вы не можете включить их, используйте вместо этого виртуальные пути:

Исходя из вашего вопроса, где вы указали, что включаемые файлы находятся в /DCN/lib, выполните следующие действия:

<!-- #include virtual="/DCN/lib/my_include_file.asp -->

При использовании виртуальных путей вы должны указать полный виртуальный путь к файлу, т.е. из корня сайта.Это не идеально, если вы создаете свое приложение в подпапке на компьютере разработчика, где вы используете XP, а затем внедряете его в корень рабочей машины.При этом IIS7 в Vista или Windows 7 теперь позволяет создавать несколько сайтов **.

При использовании типа пути File="...", имя файла должно находиться на относительном пути к папкесодержащий #include.Например:

Директива <!-- #include file="my_include.asp" --> будет включать my_include.asp из той же папки.

Директива <!-- #include file="lib/my_include.asp" --> будет включать my_include.asp из папки lib ниже текущей папкигде выполняется сценарий.

Директива <!-- #include file="../my_include.asp" --> будет включать my_include.asp из папки lib над текущей папкой (родительской папкой), в которой выполняется сценарий.

директива <!-- #include file="../lib/my_include.asp" --> будет включать my_include.asp из папки lib, которая является дочерней по отношению к родительской папке (или брату текущей папки).

Последние два примера не будут работать, если родительские пути неenabled.

** Мне известно, что в IIS5.1 XP есть несколько хаков для включения нескольких сайтов IIS.

5 голосов
/ 15 октября 2010

Я думаю, что ваша проблема в том, что родительские пути по умолчанию отключены в IIS.

У вас есть два варианта:

  1. Использование виртуальных путей
  2. Включение родительских путей ASP в IIS

Подробнее читайте в этой статье на сайте IIS
http://learn.iis.net/page.aspx/566/classic-asp-parent-paths-are-disabled-by-default/

3 голосов
/ 30 августа 2011

А как насчет #include virtual?если он читает:

#include virtual="\mysite\include\file.inc

, он должен найти file.inc в папке include в mysite?Я включил и отключил родительские пути и пробовал около миллиона вещей.Я все еще получаю asp 0126 error за файл не найден.Я могу включить его, чтобы включить файл, и затем он найдет его, но затем в файле .inc есть куча других включений, и он не может найти их независимо от того, как я изменяю его, чтобы включить файл или виртуальный.Он работает в IIS 6, но не в IIS 7, куда я перемещаю этот сайт.Это классическая страница asp, в которой почти все сделано во включаемых файлах

У меня есть mysite в папке Default Web site\dept_Sites\mysite.

...