【问题标题】:Use htaccess to redirect URL to app-specific deep-link使用 htaccess 将 URL 重定向到特定于应用程序的深层链接
【发布时间】:2020-07-27 22:50:17
【问题描述】:

我正在尝试执行以下操作:

用户访问带有查询参数的 URL:http://www.example.com/?invite=1234

然后我希望他们在 iOS 设备上深度链接到应用程序,所以他们转到:app_name://1234

关于如何在我的.htaccess 文件中完成此操作的任何建议?

我试过了,但它不起作用:

RewriteEngine On # Turn on the rewriting engine

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

如果RewriteRule 不起作用,谁能给我发一个RewriteCond 或JavaScript 的示例代码来实现我的需要?

【问题讨论】:

  • 改用Redirect
  • @ChrisG 为什么是Redirect?!
  • @MrWhite 因为我们需要浏览器来运行对app_name://... 的请求,所以操作系统可以将用户发送到应用程序,而这只有在我们重定向时才会发生,afaik。重写是关于请求的 URL 的内部重写,不是吗?浏览器没有注意到?
  • @ChrisG RewriteRule 可以进行内部重写或外部重定向 - 它取决于目标 URL(与请求 URL 不同的来源 -> 自动重定向)和使用的标志(R 强制外部重定向。 )
  • @CBroe 我明白了,感谢您的非傲慢澄清;)

标签: javascript .htaccess redirect mod-rewrite


【解决方案1】:

不确定这将如何在 iOS 设备上运行,但无论如何......

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

这与给定的 URL 不匹配。这将匹配example.com/invite/1234/ 形式的请求 URL。但是,您也在匹配 任何内容 - 您的示例 URL 仅包含数字。

RewriteRule pattern 仅匹配 URL 路径,您需要使用 RewriteCond 指令来匹配查询字符串。因此,要匹配 example.com/?invite=1234(其 URL 路径为空),您需要执行以下操作:

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

%1 反向引用指向最后匹配的CondPattern

我还将 invite 参数值限制为至少 1 个字符 - 或者您真的要允许空参数值通过吗?如果该值只能是数字,则应将模式限制为仅数字。例如。 ^invite=(\d+).

我已经包含了 R 标志 - 因为这必须是一个外部重定向 - 如果它要工作的话。

但是,除非 Apache 知道 app_name 协议,否则这可能根本不起作用。如果不是,那么它只会被视为相对 URL,并导致格式错误的重定向。

【讨论】:

    猜你喜欢
    • 2012-09-17
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    相关资源
    最近更新 更多