Я недавно решил это использование Python. Здесь код (должно быть легко принять на другие языки):
def import_tag(pattern, name, **kw):
if name[0] == "/":
name = name[1:]
# Additional HTML attributes
attrs = ' '.join(['%s="%s"' % item for item in kw.items()])
try:
# Get the files modification time
mtime = os.stat(os.path.join('/documentroot', name)).st_mtime
include = "%s?%d" % (name, mtime)
# this is the same as sprintf(pattern, attrs, include) in other
# languages
return pattern % (attrs, include)
except:
# In case of error return the include without the added query
# parameter.
return pattern % (attrs, name)
def script(name, **kw):
return import_tag("""<script type="text/javascript" """ +\
""" %s src="/%s"></script>""", name, **kw)
def stylesheet(name, **kw):
return import_tag('<link rel="stylesheet" type="text/css" ' +\
"""%s href="/%s">', name, **kw)
Этот код в основном добавляет метку времени файлов как параметр запроса к URL. Вызов следующей функции
script("/main.css")
приведет к
<link rel="stylesheet" type="text/css" href="/main.css?1221842734">
, преимущество, конечно, состоит в том, что Вы никогда не должны изменять свой HTML снова, касание файла CSS автоматически инициирует аннулирование кэша. Очень хорошие работы и издержки не примечательны.
Вы предоставляете то, что выглядит как контейнер, вместо фактического имени пользователя, которое будет использоваться при подключении к AD. Укажите каноническое имя пользователя с достаточными учетными данными для доступа к AD. Обратите внимание, что если сервер находится в том же домене, пользователь сетевой системы, под которым работает рабочий процесс, может уже иметь достаточно прав, и вам вообще не нужно указывать имя / пароль.
<add name="AspNetActiveDirectoryMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider"
applicationName="adtest"
connectionUsername="cn=actualUser"
connectionPassword="actualUsersPassword"
connectionStringName="LocalAD">
</add>