【问题标题】:Redirect wildcard URL without changing address bar在不更改地址栏的情况下重定向通配符 URL
【发布时间】:2020-08-27 16:18:00
【问题描述】:

我有一个使用 Apple 通用链接与他人共享应用事件的网站。在未安装应用程序的设备上打开事件链接应该会显示一个允许用户下载它的站点,但它也应该保持地址不变。这样做的原因是,当在 Messenger 等应用程序中打开通用链接时,也会显示此页面,其中将有一个标签,要求用户按“在 safari 中打开”。按下该按钮必须在 safari 中打开初始链接才能正确打开应用程序。

网站如下所示:

www.website.com/event/

然后将向用户显示该站点:

www.website.com/invite

同时将初始链接保留在地址栏中。

我需要使用我的 .htaccess 文件来完成此操作,并且由于我不是自己托管服务器而是通过网络托管服务来托管,因此很难更改任何更深层次的设置。

我尝试使用RewriteEngine RewriteCond RewriteRule ,通过查看这些问题,但没有任何运气:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^/event/.*$
RewriteRule ^(.*)$ http://website.no/invite [P,NC,QSA]

这是一个相当紧迫的问题,我没有时间了解各种标志

Redirect wildcard subdomains to subdirectory, without changing URL in address bar

How can I use htaccess to redirect paths with a wildcard character

https://gist.github.com/ScottPhillips/1721489

** 更新**

完整的.htaccess:

# Begin

RewriteEngine on

<Files "apple-app-site-association">
ForceType 'application/json'
</Files>

# Handle wildcard links
#RedirectMatch 301 ^/event/.*$ http://www.website.no/invite
RewriteRule ^event/[\w-]+/?$ invite [L,NC]

# Enforce SSL
# Handle non-www URLs
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^website\.no [NC]
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Handle www URLs
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.website\.no [NC]
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Handle URLs without .html extension
RewriteCond %{REQUEST_METHOD} ^(GET) [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.html -f
RewriteRule ^(.*) $1.html [L]

# End

【问题讨论】:

  • /invite/linked 有什么关系?如果您没有在要内部重写的目标 URL 中指定事件 ID,那么您正在实现的任何逻辑应该如何猜测事件 ID?
  • 这看起来好像您没有看过您要使用的工具的文档,而只是环顾四周。 那不行 ...去吧,阅读apache重写模块的文档。作为开源软件的典型代表,它具有优秀的质量,并带有很好的示例:httpd.apache.org/docs/current/mod/mod_rewrite.html
  • 而且...这可能对您来说是一个“紧迫”的问题。但请理解,这对我们来说并不紧迫。我们在这里回答合格的问题。我们不是免费的代码编写服务,也不是基本教程或文档的替代品。如果 Apple(为什么会)向他们的粉丝提出如此严格的要求,那么他们有责任为能够满足这些要求提供帮助。
  • 谢谢。不过,我想再次指出我写的关于该 ID 的内容:再次:如果您将带有 ID 的传入请求重写为没有 ID (/linked) 的某个目标,那么您的逻辑现在应该如何到达该 ID?跨度>
  • 可能你只需要这条规则:RewriteRule ^event/[\w-]+/?$ invite [L,NC]

标签: ios apache .htaccess http ios-universal-links


【解决方案1】:

这样吧:

开始

RewriteEngine on

<Files "apple-app-site-association">
ForceType 'application/json'
</Files>

# Enforce SSL
# Handle non-www URLs
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

# Handle wildcard links
#RedirectMatch 301 ^/event/.*$ http://www.website.no/invite
RewriteRule ^event/[\w-]+/?$ invite [L,NC]

# Handle URLs without .html extension
RewriteCond %{REQUEST_METHOD} ^(GET) [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.html -f
RewriteRule ^(.*) $1.html [L]

# End

确保在测试时清除浏览器缓存

【讨论】:

  • 这行得通,但为什么要删除 www url 上的部分?
  • 在此处进行一些测试后,如果我键入不包含 www 的地址,我发现您的原始答案在所有设备上都适用。这样website.no。当我包含 www 时,似乎该规则被处理 www uris 的规则覆盖
  • 如果您的 www 和非 www 规则都只是重定向 http -&gt; https,那么它们都可以像我的回答一样组合在一个重定向规则中。
猜你喜欢
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2013-06-11
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 2013-05-21
相关资源
最近更新 更多