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