Не удается использовать {HTTP_HOST} для нескольких правил перезаписи в файле web.config с хостингом GoDaddy - IIS 7.0

Я столкнулся со странной проблемой при создании нескольких правил переписывания для моего сайта, который размещается на GoDaddy. Я могу создать одно правило перезаписи, используя {HTTP_HOST} или же {SERVER_NAME} переменные, но во время добавления второго правила это выглядит как {HTTP_HOST} / {SERVER_NAME} не возвращает значение (я полагаю), поэтому мой код не работает.

После небольшой ошибки я нашел способ обойти проблему (которую я добавлю внизу). Я задаю этот вопрос, потому что я хотел бы:

  • Понять причину такого поведения
  • Знайте, если это происходит с кем-то еще
  • Выясните, ошибочен ли мой подход или я что-то упустил, чтобы это сработало

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

вопрос

Этот код работает

    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Mask myFile.xml" stopProcessing="true" patternSyntax="Wildcard">
                    <!-- This rule always -->
                    <match url="*" />
                    <conditions>
                        <add input="{REQUEST_URI}" pattern="/myFile.xml" />
                    </conditions>
                    <action type="Rewrite" url="/SiteDependentFiles/{HTTP_HOST}/new_myFile.xml"  appendQueryString="false"/>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>

Этот код не (см. Примечания внутри кода)

    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Mask myFile.xml" stopProcessing="true" patternSyntax="Wildcard">
                    <!-- This rule works on and off. When it doesn't work, it returns a 404 (Not found) error -->
                    <match url="*" />
                    <conditions>
                        <add input="{REQUEST_URI}" pattern="/myFile.xml" />
                    </conditions>
                    <action type="Rewrite" url="/SiteDependentFiles/{HTTP_HOST}/new_myFile.xml"  appendQueryString="false"/>
                </rule>
                <rule name="Mask thisThingy.txt" stopProcessing="true" patternSyntax="Wildcard">
                    <!-- This rule never works and it returns a 500 (Internal Server) error -->
                    <match url="*" />
                    <conditions>
                        <add input="{REQUEST_URI}" pattern="/thisThingy.txt" />
                    </conditions>
                    <action type="Rewrite" url="/SiteDependentFiles/{HTTP_HOST}/new_thisThingy.txt"  appendQueryString="false"/>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>

Это то, что я получаю в "подробном отчете"

Ошибка 404.0 - Подробности

  • Модуль: IIS Web Core
  • Уведомление: MapRequestHandler
  • Обработчик: StaticFile
  • Код ошибки: 0x80070002
  • Запрашиваемый URL: http://mySiteName.com:80/myFile.xml
  • Физический путь: D: \ Hosting \ 123123123 \ html \ myFile.xml
  • Метод входа: анонимный
  • Пользователь входа: Аноним

Ошибка 500.0 - Подробности

  • Модуль: ServerSideIncludeModule
  • Уведомление: ExecuteRequestHandler
  • Обработчик: SSI-html
  • Код ошибки: 0x80070002
  • Запрашиваемый URL: http://mysitename.com/thisThingy.txt
  • Физический путь: D: \ Hosting \ 123123123 \ html \ thisThingy.txt
  • Метод входа: анонимный
  • Пользователь входа: Аноним

Теперь, если изменить {HTTP_HOST} только для строки во втором правиле оба правила начинают работать:

    <action type="Rewrite" url="/SiteDependentFiles/StaticFolderName/new_thisThingy.txt"  appendQueryString="false"/>

Пожалуйста, обратите внимание:

Я также пытался использовать другой patternSyntax вариант, Redirect вместо Rewrite, stopProcessing="false", используемый {SERVER_NAME} вместо {HTTP_HOST}, добавил <clear /> до первого правила, но ничего не меняется. Такое же поведение

Временное решение

Всегда добавляйте условие правила с {HTTP_HOST} быть в состоянии использовать {SERVER_NAME} как переменная для действия правила

    <system.webServer>
        <rewrite>
            <rules>
                <clear /> 
                <!--
                    ALWAYS ADD <add input="{HTTP_HOST}" pattern="*" /> TO BE 
                    ABLE TO USE {SERVER_NAME} MULTIPLE TIMES. (GODADDY ISSUE)
                -->
                <rule name="Mask myFile.xml" stopProcessing="true" patternSyntax="Wildcard">
                    <match url="*" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="*" />
                        <add input="{REQUEST_URI}" pattern="/myFile.xml" />
                    </conditions>
                    <action type="Rewrite" url="/SiteDependentFiles/{SERVER_NAME}/new_myFile.xml"  appendQueryString="false"/>
                </rule>
                <rule name="Mask thisThingy.txt" stopProcessing="true" patternSyntax="Wildcard">
                    <match url="*" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="*" />
                        <add input="{REQUEST_URI}" pattern="/thisThingy.txt" />
                    </conditions>
                    <action type="Rewrite" url="/SiteDependentFiles/{SERVER_NAME}/new_thisThingy.txt"  appendQueryString="false"/>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>

Пожалуйста, обратите внимание:

  • я использую {HTTP_HOST} а также {SERVER_NAME}, но используя только {HTTP_HOST} может работать Я не могу проверить это прямо сейчас.

Спасибо

0 ответов

Другие вопросы по тегам