.htaccess重定向facebook爬网程序,但隐私策略除外



我有一个带有动态内容的SPA应用程序,可以在Facebook上共享,所以我在htaccess中使用以下规则将Facebook爬网程序重定向到一个漂亮的静态页面:

<IfModule mod_rewrite.c>
RewriteCond %{HTTP_USER_AGENT} ^facebookexternalhit.*$
RewriteRule ^(.*)$ https://sharing.mysite.tld/api/share/$1 [L]

这太棒了!但有一个问题。。。我无法让我的应用程序上线,因为Facebook需要一个隐私政策、条款和条件等链接,这些链接也会被重定向!!

我需要忽略某些URL-在/docs/中请求的任何来自上述规则EDIT的URL:这样包含/docs/的URL就可以正常使用(没有重定向,只是正常使用(我无法访问.hta以了解忽略规则。我本以为这样就可以了(感谢https://stackoverflow.com/a/1848579/4881971):

RewriteRule ^(docs)($|/) - [L]

所以我本以为我的.htaccess文件会是这样的:

<IfModule mod_rewrite.c>
RewriteCond %{HTTP_USER_AGENT} ^facebookexternalhit.*$
RewriteRule ^(docs)($|/) - [L]
RewriteRule ^(.*)$ https://sharing.mysite.tld/api/share/$1 [L]

但是当我在上使用Facebook对象调试器时https://mysite.tld/docs/privacy我得了404分!它重定向到https://sharing.mysite.tld/api/share/docs/privacy

如何保留规则但忽略来自mysite.tld/docs/*的请求?谢谢

请尝试以下操作,请确保在测试URL之前清除浏览器缓存。这考虑到您的uri从docs开始。

<IfModule mod_rewrite.c>
RewriteEngine ON
RewriteCond %{HTTP_USER_AGENT} ^facebookexternalhit.*$ [NC]
RewriteCond %{REQUEST_URI} ^/docs [NC]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*)$ https://sharing.mysite.tld/api/share/$1 [L]


如果您想传递URL,文档可以在uri中的任何位置出现(而不是从第一个解决方案开始查找(,请尝试以下规则。

<IfModule mod_rewrite.c>
RewriteEngine ON
RewriteCond %{HTTP_USER_AGENT} ^facebookexternalhit.*$ [NC]
RewriteCond %{REQUEST_URI} docs [NC]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*)$ https://sharing.mysite.tld/api/share/$1 [L]

用一个否定的条件:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^facebookexternalhit [NC]
RewriteRule %{THE_REQUEST} !s/+docs [NC]
RewriteRule ^ https://sharing.mysite.tld/api/share%{REQUEST_URI} [L,R=301,NE]

最新更新