Как использовать Apache директиву if для маршрутизации HTTP_USER_AGENT facebookexternalhit - PullRequest
0 голосов
/ 15 мая 2019

По какой-то причине я не могу заставить работать директиву Apache 'if' .

Я открыт для рассмотрения вопроса об использовании директивы Apache [Skip] вместо , если не будет работать.

И/ Или, может быть, есть вообще лучший способ вернуть мои лайки на Facebook?


Справочная информация

Я использую Apache 2.4 и запросы прокси кIIS.

Недавно я добавил перенаправление [R=301] для всех вызовов, чтобы перейти на https, и потерял все лайки в 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 facebookexternalhit, чтобы получить 301 перенаправление.

Основываясь на этих примерах с веб-сайта Apache, я разработал этот конфиг, но некоторый синтаксис должен быть неправильным в операторе '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 и обнаружил, что путь перенаправления все еще достигает перенаправления 301 при использовании отладчика Facebook Sharing

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: Синтаксическая ошибка настрока 4 C: /Apache24/conf/httpd.conf: Невозможно проанализировать условие условия: синтаксическая ошибка, неожиданное '(', ожидая T_REGEX или T_REGEX_I

...