Nano Hash - криптовалюты, майнинг, программирование

Модуль перезаписи IIS - как перенаправить сохранение пути и строки запроса, но добавление дополнительного параметра строки запроса?

Я бился головой о кирпичную стену, пытаясь заставить работать некоторые правила перенаправления IIS. Я искал и читал здесь, на Stack Overflow и на IIS.net, но это вообще не работает.

Я пробую его на своем локальном (реальном) IIS, у меня установлен модуль rewrite 2.0, и я попытался выполнить на нем ремонтную установку. Я выполнял iisreset в строке командной строки администратора больше раз, чем мне хотелось бы упомянуть.

В моем файле hosts я настроил 127.0.0.1 для URL my.test.com.

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

Я устанавливаю 3 правила, которые находятся в корневой папке веб-сайта, следующим образом:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="PathAndQueryString" enabled="true" stopProcessing="true">
                <match url="(/\w*)(\?\w*=\w*)([&amp;\w*=\w*]*)" />
                <action type="Redirect" url="https://www.test.com{R:1}{R:2}{R:3}&amp;param=value" appendQueryString="false" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{HTTP_HOST}" pattern="my.test.com" />
                </conditions>
            </rule>
            <rule name="Querstring" enabled="true" stopProcessing="true">
                <match url="(\?\w*=\w*)([&amp;\w*=\w*]*)" />
                <action type="Redirect" url="https://www.test.com{R:1}{R:2}&amp;param=value" appendQueryString="false" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="my.test.com" />
                </conditions>
            </rule>
            <rule name="DomainOnly" enabled="true" stopProcessing="true">
                <match url=".*" />
                <action type="Redirect" url="https://www.test.com?param=value" appendQueryString="false" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="my.test.com" />
                </conditions>
            </rule>
        </rules>
    </rewrite>
</system.webServer>

К сожалению, несмотря на тестирование шаблонов и подтверждение правильности захвата {R: x}, когда я пытаюсь проверить это с помощью Edge, Chrome, Firefox и IE для всех из них, IIS действует так, как будто правил не существует.

Тесты:

Ни один из вышеперечисленных тестов не работает, они обслуживаются без перенаправления.

Я также пробовал использовать шаблон условия как часть шаблона Match URL, но и с этим он не работал; Фактически, я переместил его в состояние после прочтения сообщения о переполнении стека, в котором говорилось, что когда правила находятся в корне сайта, он не включает хост, но по-прежнему ничего не работает.

Любая помощь приветствуется.

ОБНОВЛЕНИЕ 1: для правила пути и строки запроса попытался удалить выделенную жирным шрифтом часть в начале этого шаблона (/ \ w *). Никакого эффекта.

ОБНОВЛЕНИЕ 2: Пытался включить чрезвычайно темпераментную функцию «Отслеживание неудачных запросов», и когда она действительно работает, она говорит, что ни один из шаблонов URL сопоставления не соответствует, за исключением третьего правила, которое теперь начало действовать. и перенаправление, но не поддерживает путь и другие параметры строки запроса по очевидным причинам.

ОБНОВЛЕНИЕ 3: в Edge и IE ни одно из правил вообще не работает. В Chrome и FF перенаправление только домена работает, однако, если я отключу правило только домена и перезапущу IIS, он будет действовать так, как будто правило все еще существует - FFS дает мне силы, это дерьмо действительно начинает кипеть в моей крови - это не должно быть так чертовски сложно.


Ответы:


1

Прежде чем дать ответ, хочу сказать Юк Дину из Microsoft, который ответил на копию этого сообщения на форумах iis.net и предоставил большую часть ответа.

Итак, приступим, если вы хотите переписать правила, которые перенаправляют с одного URL на другой, сохраняя путь и строку запроса, если они существуют, и в то же время добавляя жестко запрограммированный параметр URL с соответствующим & или? тогда вот правила, которые вам понадобятся.

В правилах вы перенаправляете с my.test.com на www.test.com, но, очевидно, вам нужно будет заменить эти 2 URL-адреса в приведенных ниже правилах, а также изменить жестко запрограммированный параметр «ExtraParam = SomeValue» на то, что вам нужно.

<system.webServer>
<rewrite>
    <rules>
        <rule name="DomainOnly" enabled="true" stopProcessing="true">
            <match url="(.*)" />
            <conditions trackAllCaptures="true">
                <add input="{HTTP_HOST}" pattern="my.test.com" />
                <add input="{REQUEST_URI}" pattern="/.+" negate="true" />
            </conditions>
            <action type="Redirect" url="http://www.test.com?ExtraParam=SomeValue" redirectType="Temporary" />
        </rule>
        <rule name="PathOnly" enabled="true" stopProcessing="true">
            <match url="(.*)" />
            <conditions trackAllCaptures="true">
                <add input="{REQUEST_URI}" pattern="/.+" />
                <add input="{REQUEST_URI}" matchType="Pattern" pattern="\?.+" ignoreCase="true" negate="true" />
                <add input="{HTTP_HOST}" pattern="my.test.com" />
            </conditions>
            <action type="Redirect" url="http://www.test.com{C:0}?ExtraParam=SomeValue" redirectType="Temporary" />
        </rule>
        <rule name="Querstring" stopProcessing="true">
            <match url="(.*)" />
            <conditions trackAllCaptures="true">
                <add input="{REQUEST_URI}" pattern="/.+" />
                <add input="{QUERY_STRING}" pattern=".*" />
                <add input="{HTTP_HOST}" pattern="my.test.com" />
            </conditions>
            <action type="Redirect" url="http://www.test.com{C:0}&amp;ExtraParam=SomeValue" appendQueryString="false" redirectType="Temporary" />
        </rule>
    </rules>
</rewrite>

In my eyes the URL Rewrite 2.0 module has a bug. The basic crux is that you cannot match anything in the main match pattern you have to do everything with conditions. Thus the fact that you can set a pattern for the match is completely pointless because if you try to match anything other than (.*), i.e. match anything like I originally did it won't do what you want and will effectively cause head-bashing-brick-wall-ness.

Еще более досадно то, что в IIS Manager пользовательский интерфейс для этого очень бесполезен. Вы можете протестировать свои шаблоны - и я это сделал - и они будут работать, но все, что он на самом деле тестирует, - это шаблон regEx.

Что нам действительно нужно, так это проверка на уровне правил. Другими словами, вы вводите URL-адрес, и он сообщает вам, соответствует ли какое-либо из правил и какие условия проходят или не проходят. Да, вы можете получить эту информацию, если вы включили правила трассировки сбойных запросов, но это все утомительно для включения и работает бессистемно (просто попробуйте очистить старые журналы и посмотреть, как он затем перестанет регистрироваться, пока вы не отключите его и снова) для чего-то, что должно быть тривиальным.

23.09.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..