символ запроса urlrewritING.net в виртуальном URL, вызывающий цикл перенаправления - PullRequest
3 голосов
/ 13 января 2010

У меня есть проект, в котором мы перестраиваем сайт для клиента, новый сайт использует umbraco на платформе .net. старый сайт был холодным синтезом.

Umbraco использует библиотеку urlrewriting.net, поэтому я создал все 301 правила возврата для старых URL холодных слияний, но это вызывает бесконечный цикл.

    <add name="r66" virtualUrl="^~/thing_info/index.cfm.D413249D-BCD8-304B-02CD-561DAC70641E$"
                destinationUrl="~/about-us/award-winning-product" redirect="Application" redirectMode="Permanent" ignoreCase="true" />

Я знаю "." имеет особое значение, но работает достаточно хорошо, я тоже использовал "." соответствовать любому символу, включая «?» символ, начинающий строку запроса. если я зайду, попробуйте URL без строки запроса, например

http://staging.site/thing_info/index.cfm-D413249D-BCD8-304B-02CD-561DAC70641E

тогда меня правильно перенаправляют на

http://staging.site/about-us/award-winning-product

Однако, если я попробую URL (вопросительный знак - единственное отличие)

http://staging.site/thing_info/index.cfm?D413249D-BCD8-304B-02CD-561DAC70641E

Тогда я заканчиваю цикл перенаправления к себе. (Я проверил заголовок ответа)

У кого-нибудь есть идеи, если я сделал что-то не так или это ошибка в библиотеке urlrewriting.net? или как исправить проблему?

Ответы [ 3 ]

5 голосов
/ 20 марта 2011

По умолчанию UrlRewritingNet не будет включать строку запроса в сопоставление с образцом. чтобы включить это, вам нужно добавить следующий атрибут rewriteUrlParameter = "IncludeQueryStringForRewrite"

<add name="r66" virtualUrl="^~/thing_info/index.cfm.D413249D-BCD8-304B-02CD-561DAC70641E$"
     destinationUrl="~/about-us/award-winning-product" redirect="Application" redirectMode="Permanent" 
     ignoreCase="true" rewriteUrlParameter="IncludeQueryStringForRewrite" />

Дайте это попробовать и дайте мне знать, если это работает.

Jonathan

2 голосов
/ 14 сентября 2011

У меня была такая же проблема при попытке сделать постоянный редирект 301 с использованием umbraco и UrlRewritingNet.

Прочитав это и немного потянув за волосы, я начал работать со следующей записью в umbraco / config / urlrewriting.config

<add name="Rule1885"
      virtualUrl="^~/whats-on/event\.aspx\?id=1885"
      destinationUrl="~/whats-on/event.aspx?id=1822"
      rewriteUrlParameter="IncludeQueryStringForRewrite"
      redirectMode="Permanent"
      redirect="Application"   
      ignoreCase="true" />

Это была комбинация ответа Джонатана, для добавления rewriteUrlParameter = "IncludeQueryStringForRewrite" и правильного экранирования параметра virtualUrl, что позволило разобраться.

2 голосов
/ 18 февраля 2010

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

...