it-swarm.com.de

Alles umleiten Nach Schrägstrich (/) in ein anderes Verzeichnis

Ich bin mir sicher, dass dies eine einfache Sache ist, aber ich kann die Antwort nicht finden!

Ich versuche, https://carddav.example.com/MYUSERNAME zu https://carddav.example.com/remote.php/subdomain/addressbooks/MYUSERNAME/contacts umzuleiten, wobei MYUSERNAME alles sein kann.

Die aktuelle RewriteRule, die ich versucht habe, sieht folgendermaßen aus:

RewriteRule ^/(.*)$ https://carddav.example.com/remote.php/carddav/addressbooks/$1/contacts/ [R=301]
2
aidanharris

Sie können dies mit einem einzelnen RewriteRule tun. Der Trick dabei ist, nur nach gültigen Benutzernamen zu suchen, nicht nach alles (dh nach .* - Ich hätte nicht gedacht, dass Ihre Benutzernamen buchstäblich alles sein könnten. ). Dies wäre auch effizienter, da nicht jede Anforderung übereinstimmt und verarbeitet wird.

Angenommen, Ihre Benutzernamen dürfen nur aus Groß-/Kleinbuchstaben und Zahlen bestehen:

RewriteRule ^([a-zA-Z0-9])$ /remote.php/carddav/addressbooks/$1/contacts [R=301]

Dies ist Ihrem ersten Versuch sehr ähnlich. Beachten Sie, dass das Muster RewriteRule in verzeichnisbezogenen .htaccess-Dateien nicht mit einem Schrägstrich beginnt. Wenn diese Regel jedoch in Ihrer Serverkonfiguration verwendet wurde, würde dies der Fall sein!

Dies vermeidet natürlich auch die Umschreibeschleife, da "/remote.php/carddav ..." nicht mit einem gültigen Benutzernamen übereinstimmt (insbesondere würden . und / nicht übereinstimmen).

Sie können auch die Länge des Benutzernamens einschränken, beispielsweise zwischen 4 und 20 Zeichen ...

  • ^([a-zA-Z0-9]{4,20})$.

Wenn Sie ein beliebiges Zeichen mit Ausnahme eines Schrägstrichs finden möchten (ein Schrägstrich würde Ihre Ziel-URL sicherlich beschädigen?), Können Sie ein Muster wie das folgende verwenden:

  • ^([^/]+)$
2
MrWhite

Das Problem wurde durch viel Ausdauer behoben. Ich sollte mir wirklich die Zeit nehmen, um irgendwann mal alles über mod_rewrite zu lernen ...

Kurz gesagt, ich habe die Umleitungsschleife mit der folgenden Bedingung gelöst:

RewriteCond %{REQUEST_URI} !^/remote.php/

Die obige Bedingung entspricht im Wesentlichen allem, was nicht remote.php/ANYTHING_HERE ist

Ich habe dann die obige RewriteRule verwendet

RewriteRule ^(.*)$ /remote.php/carddav/addressbooks%{REQUEST_URI}/contacts [R=301]

Die RewriteRule ist fast identisch mit meinem vorherigen Kommentar, mit dem Unterschied, dass sie die tatsächliche Anforderung verwendet (in meinem Fall ein Benutzername mit einem Schrägstrich -/-, sodass am Ende der Adressbücher kein Schrägstrich erforderlich ist).

Das Endergebnis ist eine vollständige permanente Weiterleitung und eine praktische kurze URL, die ich beim Zugriff auf carddav verwenden kann.

1
aidanharris