Verkürzte und lange URLs in derselben Domäne zusammen verwenden (RewriteRule)

Verkürzte und lange URLs in derselben Domäne zusammen verwenden (RewriteRule)

Kurz gesagt, ich möchte beides haben example.com/aJ5und example.com/any-other-urlzusammenarbeiten. Ich verwende Apache und bin nicht sehr gut im Schreiben von regulären Ausdrücken.

Ich habe bereits eine globale Version RewriteRule, die alles an den Einstiegspunkt der App sendet. Ich muss Apache nur informieren if length($path) is <= 5 charsund dann an einen anderen Ort umschreiben.

Ich weiß, dass ich die Like-Syntax in regulären Ausdrücken verwenden kann {1,5}, weiß aber nicht wirklich, ob es das ist, wonach ich suche.

Ich möchte dies lieber auf Webserverebene als auf PHP-Ebene implementieren. Jede Hilfe ist willkommen.

Antwort1

Wenn Sie davon ausgehen können, dass das -Zeichen in Kurz-URLs nicht vorkommt:

RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]){1,5} 
RewriteRule ^ /app-entry-point?url=%1 [L]

Dies ist ungetestet, aber so etwas sollte funktionieren. Im Wesentlichen übergeben Sie eine Bedingung, wenn REQUEST_URIes sich um etwas wie handelt /abc12, wechselt die Steuerung zu dem gewünschten Handler. URLs mit mehr als 5 Zeichen oder solche, die das Slug-Zeichen „-“ oder einen Unterstrich enthalten, werden übersprungen.

%1, die letzte RewriteCondRückverweisfunktion, wird zur Kurz-URL erweitert. Setzen Sie dies über Ihre anderen Regeln, um dies zuerst durchzusetzen – mit dem [L]Flag wird das Umschreiben von URLs gestoppt und die Kontrolle an die App übergeben.

Antwort2

 RewriteCond %{REQUEST_URI}   ^/.{1,5}$
 RewriteRule ...

Dies wird auf alle Anfragen zwischen einem und fünf Zeichen Länge zutreffen und die folgende RewriteRule ausführen. Alles, was länger ist, führt die RewriteRule nicht aus. Die Variable REQUEST_URI ist das, was der Browser an den Webserver übergeben hat. Das Gleiche könnte in einer einzelnen RewriteRule gehandhabt werden, aber das Obige ermöglicht eine Verkettung, falls Sie sie benötigen.

 ^/.{1,5}$

^ = Entspricht dem Anfang der Zeichenfolge
/ = Entspricht nur einem Schrägstrich
. = Entspricht jedem Zeichen, das kein Zeilenumbruch ist
{1,5} = Informiert die Regex-Engine, das vorherige Zeichen 1-5 Mal zuzuordnen
$ = Entspricht dem Zeilenende-Zeichen

Die /.{1,5}$Konstruktion weist die Regex-Engine an, alle Zeichenfolgen der Größe 1-5 abzugleichen, auf die unmittelbar das Zeilenendezeichen folgt und denen das /Zeichen unmittelbar vorangeht.

verwandte Informationen