Настройка SSI в IIS 7

Я установил модуль ServerSideIncludes на свой компьютер, и он отлично работает, за одним исключением.

<!--#include virtual="meta.inc" -->

Строка выше вызывает проблему. Я знаю, что должен заменить virtual на file, но у меня огромный веб-сайт, и это означает, что я должен изменить как минимум 1000 строк кода, подобных этому, и я ищу способ правильно запустить virtual в IIS 7.

Я искал это решение, но все, что я смог найти, это решение, о котором я упоминал выше.

Вы знаете, как решить эту проблему, не меняя virtual на file

Спасибо.


person Tarik    schedule 01.12.2009    source источник


Ответы (3)


Включены ли родительские пути на вашем сайте? Перейдите в раздел «ASP» вашего сайта в IIS и выберите «Включить родительские пути» в разделе «Поведение» и посмотрите, поможет ли это.

Параметр «Родительские пути» позволяет вам использовать «..» в вызовах таких функций, как MapPath, разрешая пути, которые относятся к текущему каталогу, используя обозначение ..\. Установка для этого свойства значения True может представлять угрозу безопасности, поскольку путь включения может получить доступ к важным или конфиденциальным файлам за пределами корневого каталога приложения.

person Jakkwylde    schedule 01.12.2009
comment
Я не вижу такого в своем IIS, и я не использую классический Asp, кстати. - person Tarik; 02.12.2009
comment
learn.iis.net /page.aspx/566/ ссылка примерно на 1/2 пути вниз по странице - person Jakkwylde; 02.12.2009
comment
Даже если это выглядит подходящим для этого вопроса, это не сработает :( - person Tarik; 02.12.2009

SSI — это не ASP, это разные технологии.

Я обнаружил, что каждый раз, когда Microsoft выпускает новую версию любого из своих продуктов, иногда некоторые функции, которые работали в предыдущих версиях, работают иначе или вообще не работают в более новых версиях, и похоже, что эта проблема может быть одной из них.

Таким образом, вы можете подумать о переходе на Apache HTTPd (если можете), и тогда вам не нужно будет вносить все эти изменения в ваши файлы — я обнаружил, что Apache последовательно поддерживает SSI (и другие технологии/модули, директивы конфигурации и т. д.) во всех версиях HTTPd, которые его поддерживают. Эта консистенция - одна из причин, по которой он мне действительно нравится.

person Randolf Richardson    schedule 14.07.2010

На самом деле это не ответ, а скорее подтверждение вашей проблемы. Но посмотрите один возможный способ, которым virtual может сработать для вас, в конце моего ответа.

Из сообщения в блоге MSDN IIS: примечания к синтаксису серверных включений (SSI) (KB 203064 Revisited) (датировано 28 декабря 2010 г.; относится к версиям IIS с 4.0 по 7.5):


Дополнительная информация о синтаксисе файлов и виртуальных файлов

Директивы SSI, использующие пути к файлам, могут ссылаться на файлы, используя файл или виртуальный путь.

  • Элемент file используется с файлами, относящимися к папке текущего документа. Следующий пример включает файл в текущей папке:
<!--#include file="myfile.txt"-->
  • Элемент virtual представляет пути, относящиеся к базовой папке веб-сервера. Следующий пример включает файл в виртуальной папке /scripts:
<!--#include virtual="/scripts/myfile.txt"-->

Вывод. Атрибут file используется для обозначения расположения файла относительно текущего документа. Итак, если это то, что необходимо в вашей ситуации, вам действительно нужно изменить атрибут virtual на атрибут file.

Однако есть одно возможное исключение. В статье Серверные включения в Википедии показан следующий пример:

<!--#include virtual="menu.cgi" -->

Это наводит меня на мысль, что путь к файлу virtual необязательно должен начинаться с /. При отсутствии начального / расположение файла virtual определяется относительно базовой папки веб-сервера.

Итак, мне кажется, что атрибуты file и virtual могут вести себя одинаково, если файлы, на которые ссылаются, находятся в базовой папке (или подпапках базовой папки) веб-сервера.

person DavidRR    schedule 19.08.2014