Používám IIS URL Rewrite a tenhle mě naštval.

Přesměrovávám adresu URL se specifickou podsložkou na novou adresu URL.

např. https://myapp.example.com/customsite1 přesměrován na https://newsite1-myapp.example.com

Pokud použiji tento vzor:

^(.*)customsite1(.*)$ 

Funguje to dobře. Problém je v tom, že k adrese URL mohou být přidány argumenty, které také používají toto slovo customsite1. Takže jsem si pomyslel: „Samozřejmě, snadný způsob, jak to napravit, je shoda /customsite1'

Ale nikdy to nefunguje.

^(.*)/customsite1(.*)$ 

nikdy nebude odpovídat https://myapp.example.com/customsite1 i když funkce Testovací vzor říká, že bude.

Co mi tady chybí?

  • Uveďte prosím skutečné konfigurační směrnice, které používáte. Jaké jsou (.*) podskupiny ve vašem regulárním výrazu pro?

Myslím, že máte na mysli pole Match URL pattern, toto:

V takovém případě přijaté hodnoty vždy začínají bez první / a nezahrnujte ani parametry řetězce dotazu (pokud potřebujete rozhodovat na základě řetězce dotazu, musí být zpracováno s pravidlem podmínky (pomocí {QUERY_STRING} pole v zadání podmínky).

Pokud jsou tedy argumenty přidány do řetězce dotazů, nemělo by vás to vůbec znepokojovat. Pokud jsou argumenty, které zmiňujete, součástí adresy URL, například:

https://myapp.example.com/customsite1/action/param1/customsite1/param3

pak byste měli použít regulární výraz podobný tomuto:

^customsite1(/.*){0,1}$

Toto odpovídá "/ Customite1" s koncovým lomítkem nebo bez něj a všeho, co za ním následuje, a zachycuje tuto část. Nezáleží na tom, zda některá část adresy URL přidává stejný název jako hlavní složka, kterou se pokoušíte přesměrovat.

Do pole „Adresa URL přesměrování“ akce přesměrování můžete napsat:

https://newsite1-myapp.example.com{R:1}

bez posledního lomítka, protože je zachycen regulárním výrazem, a přesměruje požadavek do této složky na novou doménu a po vaší složce přidá zbytek adresy URL.

HTH

Pracoval pro vás: Charles Robertson | Chcete nás kontaktovat?