Назад | Перейти на главную страницу

Возможная ошибка в модуле перезаписи URL-адресов IIS или это только у меня?

Хорошо, поэтому мне пришла в голову блестящая идея запустить W2012 IIS8 с правилами перезаписи, чтобы сделать для меня обратное проксирование, не потому, что это лучший выбор, а потому, что я не хотел, чтобы еще один ящик решал еще одну проблему.

Мне удалось все это запустить очень красиво с двумя подкаталогами, связанными с двумя внутренними серверами Linux, и все исходящие теги, казалось, были переписаны, как и должно быть. Пока я не попытался войти в систему и не понял, что он пропускает некоторые поля формы.

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

<form accept-charset="UTF-8" action="/login" ...

который, конечно, содержит атрибут с дефисом.

Итак, я решил решить эту проблему и придумал следующее:

/test/default.htm

<html>
    <a href="/ahrefpage.htm">This ahref has no dummy attribute</a>  </br>
    <a dummy="x" href="/ahrefpage.htm">This ahref has a dummy attribute</a> </br>
    <a dum-my="x" href="/ahrefpage.htm">This ahref has a hyphen dummy attribute</a> </br>
    <a dum_my="x" href="/ahrefpage.htm">This ahref has an underscore dummy attribute</a>    </br>
</html>

со следующим web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <outboundRules>
                <rule name="OutboundRewriteTestPage" preCondition="isHtml" enabled="true">
                    <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" customTags="" pattern="^/(.*)" />
                    <action type="Rewrite" value="/test/{R:1}" />
                </rule>
                <preConditions>
                    <preCondition name="isHtml">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
                <customTags>
                </customTags>
            </outboundRules>
        </rewrite>
        <urlCompression doStaticCompression="false" doDynamicCompression="false" />
    </system.webServer>
</configuration>

Итак, получившаяся страница была такой

This ahref has no dummy attribute           https://portal.xx.com/test/ahrefpage.htm
This ahref has a dummy attribute            https://portal.xx.com/test/ahrefpage.htm
This ahref has a hyphen dummy attribute     https://portal.xx.com/ahrefpage.htm
This ahref has a underscore dummy attribute https://portal.xx.com/ahrefpage.htm

Итак, в основном вопрос в том, является ли это еще одной плохой реализацией MS технологии, которая хорошо работает в Linux, или я что-то пропустил? Есть ли обходной путь - за исключением изменения исходного материала, которое противоречит цели.

Спасибо, Chris.J