由于某种原因,我无法使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重定向
我也尝试过-而且也不起作用:
<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