Перезапись субдомена в каталог с помощью web.config в Azure Web App - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь разместить все мои субдомены в соответствующих папках на моем веб-сервере, что означает

https://foo.bar.com/index.html

находится по адресу

https://bar.com/foo/index.html

по моей текущей конфигурации, файл не может и не должен быть доступен через «оригинальную» ссылку.

Мой текущий подход работает, за исключением URL-адресов, которые указывают на подкаталог без имени файла в пути - в этом случае субдомен повторно включается в путь переписанного url:

https://foo.bar.com/this/does/work.html

обслуживает файл, расположенный по адресу

https://bar.com/foo/this/does/work.html

пока

https://foo.bar.com/this/does/not/work

переписывается в браузере на

https://foo.bar.com/foo/this/does/not/work

, что по понятным причинам приводит к 404.

Однако, если вы введете URL-адрес с проблемами непосредственно в браузере

https://foo.bar.com/this/does/not/work

работает как положено.

Я знаю, что я использую слово "очевидно" в широком смысле. Вот короткая демонстрация:

https://egal.todoservice.app/

как вы должны видеть там, ссылка на странице https://egal.todoservice.app/sub/dir/

ведет вас к https://egal.todoservice.app/egal/sub/dir/

, но попробуйте ввести эту ссылку прямо в адресную строку, и она работает - по крайней мере, для меня это проверено в Chrome, Edge и Firefox.

ОБНОВЛЕНИЕ: странно, использование ссылки subdir здесь на stackoverflow работает, как и ожидалось ...

Это часть моего web.config, которая отвечает за перезапись поддомена

<rule name="Rewrite Subdomain To Directory" stopProcessing="false">
    <match url=".*" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^(.+)\.todoservice\.app$" />
    </conditions>
    <action type="Rewrite" url="{C:1}/{R:0}" />
</rule>

А вот мой полный web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <staticContent>
             <mimeMap fileExtension="." mimeType="text/plain" />
             <mimeMap fileExtension=".nupkg" mimeType="application/zip" />
         </staticContent>        
        <rewrite>
            <rules>
                <rule name="Rewrite SMZC URL" stopProcessing="false">
                    <match url=".*" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="www.sadmenszombieclub.com"  />
                    </conditions>
                    <action type="Rewrite" url="smzc/{R:0}" />
                </rule>
                <rule name="Rewrite imagiro URL" stopProcessing="false">
                    <match url=".*" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="www.imagiro.net"  />
                    </conditions>
                    <action type="Rewrite" url="imagiro/{R:0}" />
                </rule>

                <rule name="Rewrite Subdomain To Directory" stopProcessing="false">
                    <match url=".*" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^(.+)\.todoservice\.app$" />
                    </conditions>
                    <action type="Rewrite" url="{C:1}/{R:0}" />
                </rule>

                <rule name="Rewrite root path to service Directory" stopProcessing="true">
                    <match url=".*" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^todoservice\.app$" />
                    </conditions>
                    <action type="Rewrite" url="service/{R:0}" />
                </rule>                
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Весь сайт размещен как веб-приложение Azure.

1 Ответ

0 голосов
/ 13 сентября 2018

Скопировано из комментария.

Вы делаете не просто переписывание, а обратное проксирование.Таким образом, необходимо внести несколько изменений:

  1. В вашем действии вместо того, чтобы переписать фактический путь (<action type="Rewrite" url="{C:1}/{R:0}" />), вы также должны добавить полное доменное имя к url.Таким образом, IIS знает, что вы хотите настроить обратный прокси-сервер.
  2. Включите режим прокси-сервера ARR в службе приложений Azure, следуя сообщениям в блоге, таким как https://tomssl.com/2015/06/15/create-your-own-free-reverse-proxy-with-azure-web-apps/
...