Verwenden Sie htaccess, um die URL zu einem app-spezifischen Deep-Link umzuleiten

Jul 27 2020

Ich versuche Folgendes zu tun:

Benutzer besucht URL mit Abfrageparameter: http://www.example.com/?invite=1234

Ich möchte dann, dass sie tief in die App auf ihrem iOS-Gerät eingebunden sind, also gehen sie zu: app_name://1234

Irgendwelche Vorschläge, wie dies in meiner .htaccessDatei erreicht werden kann?

Ich habe es versucht, aber es funktioniert nicht:

RewriteEngine On # Turn on the rewriting engine

RewriteRule ^invite/(.*)/$ app_name://$1 [NC,L]

Wenn RewriteRulees nicht funktioniert, kann mir jemand einen Beispielcode RewriteCondoder JavaScript senden , um das zu erreichen, was ich brauche?

Antworten

MrWhite Jul 28 2020 at 00:18

Ich bin mir nicht sicher, wie das mit dem iOS-Gerät funktionieren wird, aber trotzdem ...

RewriteRule ^invite/(.*)/$ app_name://$1 [NC,L]

Dies stimmt nicht mit der angegebenen URL überein. Dies würde mit einer angeforderten URL des Formulars übereinstimmen example.com/invite/1234/. Sie stimmen jedoch auch mit allem überein - Ihre Beispiel-URL enthält nur Ziffern.

Das RewriteRule Muster stimmt nur mit dem URL-Pfad überein. Sie müssen eine RewriteCondDirektive verwenden, um mit der Abfragezeichenfolge übereinzustimmen. Um eine Übereinstimmung zu erzielen example.com/?invite=1234(die einen leeren URL-Pfad hat), müssten Sie stattdessen Folgendes tun:

RewriteCond %{QUERY_STRING} ^invite=([^&]+)
RewriteRule ^$ app_name://%1 [R,L]

Die %1Rückreferenz bezieht sich auf das zuletzt übereinstimmende CondPattern .

Ich habe den inviteParameterwert auch auf mindestens 1 Zeichen beschränkt - oder möchten Sie wirklich leere Parameterwerte durchlassen? Wenn der Wert nur aus Ziffern bestehen kann, sollten Sie das Muster auf nur Ziffern beschränken. z.B. ^invite=(\d+).

Ich habe das RFlag eingefügt - da dies eine externe Weiterleitung sein müsste -, wenn es überhaupt funktionieren soll.

Dies funktioniert jedoch möglicherweise überhaupt nicht, es sei denn, Apache kennt das app_nameProtokoll. Wenn dies nicht der Fall ist, wird es einfach als relative URL angezeigt und führt zu einer fehlerhaften Weiterleitung.