Sử dụng htaccess để chuyển hướng URL đến liên kết sâu dành riêng cho ứng dụng

Jul 27 2020

Tôi đang cố gắng thực hiện những điều sau:

Người dùng truy cập URL với tham số truy vấn: http://www.example.com/?invite=1234

Sau đó, tôi muốn họ được liên kết sâu vào ứng dụng trên thiết bị iOS của họ, vì vậy họ truy cập: app_name://1234

Bất kỳ đề xuất nào về cách thực hiện điều này trong .htaccesstệp của tôi ?

Tôi đã thử điều này nhưng nó không hoạt động:

RewriteEngine On # Turn on the rewriting engine

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

Nếu RewriteRulekhông hiệu quả, có ai có thể gửi cho tôi một mã ví dụ RewriteCondhoặc JavaScript để đạt được những gì tôi cần không?

Trả lời

MrWhite Jul 28 2020 at 00:18

Không chắc điều này sẽ hoạt động như thế nào với thiết bị iOS, nhưng dù sao ...

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

URL này không khớp với URL đã cho. Điều này sẽ khớp với một URL được yêu cầu của biểu mẫu example.com/invite/1234/. Tuy nhiên, bạn cũng đang khớp với bất kỳ thứ gì - URL mẫu của bạn chỉ chứa các chữ số.

Các RewriteRule mô hình các trận đấu chống lại các URL-con đường duy nhất, bạn cần phải sử dụng một RewriteCondchỉ thị để phù hợp với chuỗi truy vấn. Vì vậy, để khớp example.com/?invite=1234(có đường dẫn URL trống), thay vào đó bạn cần thực hiện một số việc như sau:

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

Các %1backreference đề cập trở lại những lần xuất hiện cuối cùng CondPattern .

Tôi cũng đã giới hạn invitegiá trị tham số ở ít nhất 1 ký tự - hay bạn thực sự muốn cho phép các giá trị tham số trống thông qua? Nếu giá trị có thể chỉ là các chữ số thì bạn nên giới hạn mẫu chỉ có các chữ số. ví dụ. ^invite=(\d+).

Tôi đã bao gồm Rcờ - vì đây sẽ phải là một chuyển hướng bên ngoài - nếu nó hoạt động.

Tuy nhiên, điều này có thể không hoạt động trừ khi Apache biết về app_namegiao thức. Nếu không thì nó sẽ chỉ được xem là một URL tương đối và dẫn đến chuyển hướng không đúng định dạng.