Regulären Ausdruck für alle https-URLs außer einem bestimmten Pfad
Brauche ich eine regex, die passen auf alle https-URLs außer für einen bestimmten Pfad.
z.B.
Match
https://www.domain.com/blog
https://www.domain.com
Nicht Übereinstimmen
https://www.domain.com/forms/*
Dies ist, was ich habe, so weit:
<rule name="Redirect from HTTPS to HTTP excluding /forms" enabled="true" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{URL}" pattern="^https://[^/]+(/(?!(forms/|forms$)).*)?$" />
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}/{R:0}" redirectType="Permanent" />
</rule>
Aber es funktioniert nicht
- Passenden url ' s gefragt hat hundert mal. Aber vergessen Sie über die Suche nach einem Duplikat und bitte sagen Sie uns, welchen Geschmack Sie verwenden ?
- Hallo Hamza, ich habe versucht zu finden ein regex passt zu meiner Anforderung konnte aber keine bekommen. Ich bin mit IIS URL-Rewriting-Modul. Die Regel ist, entsprechen alle, mit Ausnahme, das ist das knifflige bit. Es wäre toll, wenn könnten Sie helfen, es zu gewinnen würde mir ein paar Stunden Schlaf. Dies bringt mich in der Nähe, aber nicht nahe genug stackoverflow.com/questions/2277340/...
- Was sollte verhindern, dass das match genau das, was sind die Regeln für eine nicht-gültige URL ?
- Ich möchte fangen alle https-Datenverkehr und leiten Sie zu http, es sei denn, die https-url ist domain.com/forms*
- Es scheint einen Fehler in Ihrem Zustand, Ihrer Muster sagt "http -?" statt "https". Ist, dass das Problem vielleicht?
- Danke an alle für die Antworten, wirklich dankbar für die Hilfe
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Weg der redirect-Modul funktioniert, sollten Sie Sie einfach benutzen:
Die Regel wird ausgelöst, der redirect auf HTTP nur, wenn die Anfrage war HTTPS und wenn der Pfad nicht ab
forms/
oderforms
(mit dernegate="true"
option).Sie könnten auch eine Bedingung für die host-zu-match -
www.example.com
wie folgt:Tut dies, geben Sie das Verhalten, das Sie suchen?
https?://[^/]+($|/(?!forms)/?.*$)
Nach der
www.domain.com
bit, es sucht entweder das Ende des Strings, oder für einen Schrägstrich und dann etwas, das NICHTforms
.Kam ich mit dem folgenden Muster:
^https://[^/]+(/(?!form/|form$).*)?$
Erklärung:
^
: match beginnt der stringhttps://
: matchhttps://
[^/]+
: Spiel alles, außer slash ein-oder mehrmals(
: start-matching-Gruppe 1/
: match/
(?!
: negative lookaheadform/
: überprüfen Sie, ob es gibt keineform/
|
: oderform$
: überprüfen Sie, ob es gibt keineform
am Ende der Zeichenfolge)
: Ende negative lookahead.*
: match alles null oder mehrere Male)
: Ende passende Gruppe 1?
: stellen Sie die vorherigen token optional$
: match-Ende der Zeile?
:pSehe ich zwei Probleme in der gebuchten Muster
http://[^/]+($|/(?!forms)/?.*$)
Es findet umleiten von URLs wie
https://domain.com/forms_instructions
, da das Muster nicht die erwartete diese auch.Ich glaube, Sie haben http-und https-Umgekehrt zwischen dem Muster und der URL. Das Muster sollte
https
und die URLhttp
.Vielleicht wird dies so funktionieren, wie Sie wollen:
Edit: ich habe verschoben Sie die Muster auf dem tag selbst, da passende alles mit .* und dann mit einer weiteren Bedingung scheint unnötig. Habe ich auch geändert die Umleitungs-URL zu verwenden, die Teil des Eingabe-URL erfasst, die durch die Klammern in das match.