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

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

Umbraco использует библиотеку urlrewriting.net, поэтому я создал все правила 301 recirect для старых 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? или как исправить проблему?


person Myster    schedule 13.01.2010    source источник


Ответы (3)


По умолчанию 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" />

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

Джонатан

person Jonathan Stanton    schedule 20.03.2011

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

person BeaverProj    schedule 18.02.2010
comment
Я так не думаю, у меня есть предложение, охватывающее этот сценарий в вопросе. - person Myster; 19.02.2010

У меня была такая же проблема при попытке сделать постоянное перенаправление 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, который разобрался.

person brodie    schedule 14.09.2011