TL / DR. Может ли несколько перезаписей (и окончательное перенаправление) для одного и того же ресурса URI быть объединено в несколько файлов web.config, находящихся в подпапках по пути URI во время одного и того же запроса?
I'mпопытка перенести мой классический ASP-сайт с одного виртуального хоста на другой;новый с использованием IIS7.5. На моем веб-сайте много субдоменов, и новый хостер по умолчанию использует один истинный экземпляр веб-сайта на субдомен, но тогда мой план допускает использование только нескольких из этих субдоменов, и, поскольку они имеют чрезвычайно низкий трафик, один экземпляр веб-сервера должен работать идеально. хорошо. Поэтому я хочу, чтобы один основной экземпляр веб-сайта обслуживал все субдомены.
Мой путь на их сервере выглядит примерно так: D:\websites\myaccount\mysite\wwwroot
. Для чистоты (чтобы разделить все файлы для поддоменов в их собственных папках) я создал отдельную папку для каждого поддоменов в корневой папке моего хостинга (например, на D:\websites\myaccount\subdomain1
), и добавил виртуальные папки, отображающие имена под wwwrootв эти папки поддоменов (например, виртуальная папка subdomain1
сопоставляется с D:\websites\myaccount\subdomain1
).
Затем я добавил правила перезаписи в главную папку wwwroot web.config, чтобы перехватывать запросы для поддоменов и переписывать их для сопоставления свиртуальные папки;
<rule name="Subdomain support" stopProcessing="false">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(subdomain1|subdomain2|subdomain3)\.mysite\.com$" />
</conditions>
<action type="Rewrite" url="{C:1}/{REQUEST_URI}" />
</rule>
Используя это, запросы к http://subdomain1.mysite.com/dir1/file.asp
действительно действительно хорошо обслуживаются через виртуальную папку subdomain1
из D:\websites\myaccount\subdomain1\dir1\file.asp
.
Теперь я хочу, чтобы каждый поддоменбыть в состоянии добавить свои собственные правила переписывания в микс. Наиболее важным является то, что запросы на корень субдомена должны отображаться в файл по умолчанию в наиболее подходящей языковой подпапке. Прямо внутри папки subdomain1 у меня, таким образом, есть еще один файл web.config, содержащий:
<clear />
<rule name="subdomain root redirect to proper language subpath" stopProcessing="true">
<match url="^$" />
<conditions>
<add input="{HTTP_ACCEPT_LANGUAGE}" pattern="^(en|nl|de|es)" ignoreCase="true" />
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}/{C:1}/index.asp" redirectType="Found" />
</rule>
<rule name="subdomain root redirect to default language subpath" stopProcessing="true">
<match url="^$" />
<action type="Redirect" url="http://{HTTP_HOST}/en/index.asp" redirectType="Found" />
</rule>
Это должно перенаправить браузер с subdomain1.mysite.com
на subdomain1.mysite.com/en/index.asp
(если предпочитаемый язык браузера установлен на «en. * ").
Однако я не могу подобрать эти правила, независимо от того, что я делаю. Я проверил это, даже сопоставив .*
и изменив перенаправления, чтобы указать, например, на google.com, но сервер просто обслуживает 403 запрещенных, и когда я добавляю:
<directoryBrowse enabled="true" />
, яполучать список папок самой субдомена. Мои перенаправления начинают кричать «Неужели я ничего не значу для тебя ?!», и я хочу прекратить кричать.
Однако, когда я набираю subdomain1.mysite.com/subdomain1/
, перенаправления поднимаются ... Я также попытался переписать в обычные (не виртуальные) папки под wwwroot, и у него те же симптомы.
Неужели я заблуждаюсь, думая, что это возможно? Может быть, так как исходный URI не содержит (записанную) прерывистую часть ...\subdomain1\...
в пути к папке, то IIS не учитывает web.config этой папки?
Моя первая попыткадолжен был использовать файлы .htaccess (.irwaccess), но вскоре я обнаружил, что они не наследуются (верно?), поэтому я и заглянул в файлы web.config.