Последующие правила перезаписи IIS в файле web.config в (виртуальной) папке не обнаруживаются - PullRequest
1 голос
/ 27 октября 2019

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.

1 Ответ

1 голос
/ 30 октября 2019

Ваше требование - перенаправление subdomain1.mysite.com в subdomain1.mysite.com / ru / index.asp .

Затем переписать на subdomain1.mysite.com / subdomain1 / en / index.asp right?

Если вы включите FRT, вы увидите, что правило перенаправления в поддомене 1 будетникогда не был казнен. Это дизайн.

В этом случае вам нужно просто переместить все эти правила в корневую папку web.config и изменить порядок следующим образом:

enter image description here

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

...