如何使用Apache'if'指令破坏HTTP_USER_AGENT facebookexternalhit

时间:2019-05-15 15:54:21

标签: apache facebook proxy user-agent

由于某种原因,我无法使Apache 'if'指令正常工作。

如果 if 不起作用,我愿意考虑使用Apache [Skip] flag directive

和/或是否可能有一种更好的方法来找回我的Facebook点赞?


背景

我正在运行Apache 2.4和对IIS的代理请求。

我最近为所有要转到https的呼叫添加了[R=301]重定向,但所有Facebook点赞都丢失了。

我的原始设置-当Facebook赞计数有效时(简短版):

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    <IfModule mod_proxy.c>
        ProxyRequests Off           
        ProxyPass        /          http://192.168.1.5:89/
        ProxyPassReverse /          http://192.168.1.5:89/
        RewriteRule      ^(.+)$     http://example.com/$1 [P,L]         
    </IfModule>
</VirtualHost>

我将其更改为-Facebook点赞数降至0。

<VirtualHost *:80>
    ServerName example.com:80
    ServerName www.example.com:80   
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
</VirtualHost>

很明显,我想找回我的“赞”

因此,我试图阻止Facebook scraping agent facebookexternalhit获得301重定向。

基于Apache网站上的这些examples,我想到了此配置,但是'if'语句中的某些语法必定是错误的,因为它不起作用:

<VirtualHost *:80>
    ServerName example.com:80
    ServerAlias www.example.com:80
    <If "req(%{HTTP_USER_AGENT}) != '(facebookexternalhit/[0-9])'">     
        RewriteEngine On
        RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
    </If>
    <IfModule mod_proxy.c>
        ProxyRequests Off           
        ProxyPass        /          http://192.168.1.5:89/
        ProxyPassReverse /          http://192.168.1.5:89/
        RewriteRule      ^(.+)$    http://example.com/$1 [P,L]         
    </IfModule>
</VirtualHost>

在重新启动Apache时,我没有看到Apache错误,并且发现在使用Facebook Sharing Debugger时重定向路径仍然达到301重定向

enter image description here

我也尝试过-而且也不起作用:

<VirtualHost *:80>
    ServerName example.com:80
    ServerAlias www.example.com:80
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} !(facebookexternalhit/[0-9]|Twitterbot|Pinterest|Google.*snippet)
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
    <IfModule mod_proxy.c>
        ProxyRequests Off           
        ProxyPass        /          http://192.168.1.5:89/
        ProxyPassReverse /          http://192.168.1.5:89/
        RewriteRule      ^(.+)$    http://example.com/$1 [P,L]         
    </IfModule>
</VirtualHost>

我也尝试过<If "%{HTTP_USER_AGENT} !~ (facebookexternalhit)">,但遇到错误 AH00526:C:/Apache24/conf/httpd.conf的第4行出现语法错误:无法解析条件子句:语法错误,意外的'(' ,预期为T_REGEX或T_REGEX_I

0 个答案:

没有答案