Utilisez htaccess pour rediriger l'URL vers un lien profond spécifique à l'application

Jul 27 2020

J'essaye de faire ce qui suit:

L'utilisateur visite l'URL avec le paramètre de requête: http://www.example.com/?invite=1234

Je veux ensuite qu'ils soient profondément liés à l'application sur leur appareil iOS, ils vont donc à: app_name://1234

Des suggestions sur la façon d'accomplir cela dans mon .htaccessdossier?

J'ai essayé ça mais ça ne marche pas:

RewriteEngine On # Turn on the rewriting engine

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

Si RewriteRulecela ne fonctionne pas, quelqu'un peut-il m'envoyer un exemple de code pour RewriteCondou JavaScript pour réaliser ce dont j'ai besoin?

Réponses

MrWhite Jul 28 2020 at 00:18

Je ne sais pas comment cela fonctionnera avec l'appareil iOS, mais de toute façon ...

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

Cela ne correspond pas à l'URL donnée. Cela correspondrait à une URL demandée du formulaire example.com/invite/1234/. Cependant, vous correspondez également à n'importe quoi - votre URL d'exemple ne contient que des chiffres.

Le RewriteRule modèle correspond uniquement au chemin URL, vous devez utiliser une RewriteConddirective pour faire correspondre la chaîne de requête. Donc, pour correspondre example.com/?invite=1234(qui a un chemin URL vide), vous devez faire quelque chose comme ce qui suit à la place:

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

La %1référence arrière fait référence au dernier CondPattern correspondant .

J'ai également limité la invitevaleur du paramètre à au moins 1 caractère - ou voulez-vous vraiment autoriser les valeurs de paramètre vides? Si la valeur ne peut être que des chiffres, vous devez limiter le modèle à uniquement des chiffres. par exemple. ^invite=(\d+).

J'ai inclus le Rdrapeau - car cela devrait être une redirection externe - si cela fonctionne du tout.

Cependant, cela peut ne pas fonctionner du tout à moins qu'Apache ne connaisse le app_nameprotocole. Si ce n'est pas le cas, il sera simplement considéré comme une URL relative et entraînera une redirection mal formée.