IIS7.5 URL RIVEDA REGEX MATCHING quando non dovrebbe
-
29-10-2019 - |
Domanda
Ho diviso alcune pagine tra i sottodomini e voglio riscrivere un URL su diverse pagine su diversi sottodomi in alcuni casi. Tutto è una regola di riscrittura ad eccezione delle due regole finali nel file. Queste ultime due regole determinano a quale sottodominio instrada il percorso che ho fissato.
Il modo in cui lo sto facendo è se preparo il percorso con un sottolineaggio (_), allora rimane in sottodominio A. Se preparo il percorso con un tilde (~), allora viene reindirizzato al sottodominio B.
Quindi ho questa regola:
<rule name="Login rule" stopProcessing="false">
<match url="(.*?)/?old-path/Login\.aspx$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_METHOD}" pattern="GET" />
</conditions>
<action type="Rewrite" url="~new-path/login.aspx" />
</rule>
Si prega di notare che c'è un ASPX alla fine dell'URL. Continua a elaborare, ma ho una regola di riscrittura generica alla fine dell'elenco proprio prima di quelli di reindirizzamento. Questo per rimuovere tutte le estensioni ASPX sul sottodominio A (www), ma voglio lasciare l'estensione ASPX per il sottodominio B (per favore non suggerire di rimuovere il suggerito nel secondo sottodominio. Grazie :)
<rule name="Remove ASPX" stopProcessing="false">
<match url="^([^www\.]+)\.aspx$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="_{R:1}" />
</rule>
Il problema è che questo non funzionerà perché tutti gli URL hanno www all'inizio. Non sono così bravo con Regex, ma immagino di dover semplicemente applicare questa regola a tutti gli URL che contiene un tilde. Ho provato questo, ma non funziona neanche:
<match url="^_+\.aspx$" />
Fondamentalmente voglio che questa regola ignori gli URL che ho riscritto per avere un ~
in loro, ma rimuovi l'ASPX se ho posizionato il _
All'inizio del percorso.
Eventuali suggerimenti?
Soluzione
Se ho capito il tuo problema, allora hai l'URL: "~ new-path/login.aspx" e vuoi fare reindirizzare a "~ new-path/login", giusto?
Allora il tuo regex dovrebbe essere così:
^(.*~.*)\.aspx$
Nota: "WWW" fa parte del nome di dominio e non incluso nella corrispondenza.
Quindi, se il tuo URL completo è "http://www.mysite.com/~new-path/login.aspx", solo "~ new-path/login.aspx" prenderà parte alla corrispondenza regex.
E il modello {r: 1} conterrà valore nel primo gruppo (parentesi graffe): "~ new-path/login"