Как исправить перезапись URL для ссылок внутри CSS-файлов с IIS7
Я пытаюсь настроить прокси-сервер для своих друзей дома. В настоящее время я следую учебному пособию на веб-сайте ( http://blogs.iis.net/carlosag/archive/2010/04/01/setting-up-a-reverse-proxy-using-iis-url-rewrite-and-arr.aspx) но я столкнулся со странной проблемой.
Я пытался сделать / pandora redirect на www.pandora.com, но ссылки внутри CSS-файлов не меняются. Кроме того, они все еще связаны с путем localhost / img /... Они должны быть перенаправлены на путь localhost / pandora / img /..
фрагмент с первой веб-страницы
<link rel="shortcut icon" href="/pandora/favicon.ico" type="image/x-icon" />
<link rel="icon" type="image/ico" href="/pandora/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/compiled.css?v=95845013">
<link id="valanceStyle" rel="stylesheet" type="text/css" href="/pandora/static/valances/pandora/default/design.css"/>
Ребята, вы можете помочь мне решить эту проблему?
1 ответ
Это можно сделать с помощью правила перезаписи исходящего трафика в сочетании с ARR. Следующее правило должно сделать это:
<system.webServer>
<rewrite>
<outboundRules>
<rule name="Rewrite image URLs in CSS response" preCondition="IsCSS">
<match pattern="localhost/img/" />
<action type="Rewrite" value="localhost/pandora/img/" />
</rule>
<preConditions>
<preCondition name="IsCSS">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="text/css" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
</system.webServer>
Конечно, вы должны заменить localhost на правильные доменные имена. Если вы переписываете с другого доменного имени, то тег соответствия должен содержать доменное имя, которое вы хотите заменить, а тег действия должен содержать доменное имя, которое вы хотите заменить.
Поскольку CSS не является HTML, вы не можете использовать функцию фильтрации тегов модуля перезаписи URL. Таким образом, он может выполнять сопоставление только регулярных выражений по всему содержимому файла CSS, что потенциально может сильно загружать процессор для больших файлов CSS. Если вы знаете, сколько URL нужно заменить, вы можете добавить occurrences="x"
приписать <match>
тег для ограничения количества совпадений, которые должен искать модуль перезаписи URL. Также попробуйте переместить правила CSS в начало файла CSS. Например:
<action type="Rewrite" value="localhost/pandora/img/" occurrences="3" />
Вы также можете включить кэширование пользовательского режима в IIS и добавить атрибут rewriteBeforeCache="yes"
к <outboundRules>
тег, чтобы IIS кэшировал переписанный контент. Например:
<outboundRules rewriteBeforeCache="yes">
Более полезную информацию и советы о правилах перезаписи исходящих файлов можно найти в этом блоге.