Как не перенаправить Twitterbot при использовании cloudflare SSL? - PullRequest
1 голос
/ 15 февраля 2020

Твиттер-карты (twitter: image или og: image) не разрешают https от общего SSL, включая Cloudflare. Упомянутое обходное решение - создать файл .htaccess и добавить код в , а не , перенаправить twitterbot на общий https. Проблема в том, что это разрывает мои страницы, говоря, что слишком много перенаправлений.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} ^example.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteCond %{HTTP_USER_AGENT} !Twitterbot [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301,NC]
</IfModule>

При этом, когда я запускаю страницу через Twitter Card Validator, когда у меня есть этот код .htaccess, изображение нормально отображается на валидаторе карты Twitter. Но, как я уже упоминал, веб-сайт ломается из-за слишком большого числа перенаправлений.

Я попытался удалить код .htaccess и поместить изображение твиттер-карты в каталог с именем / social / и поместить это правило страницы в Cloudflare: example.com / social / - отключить безопасность в качестве первого правила (на странице работает только одно правило), и twitterbot просто игнорирует его, даже если я вручную указываю путь к изображению в этом каталоге, это неправильно перенаправление на https.

<meta property="og:image" content="http://example.com/social/image.jpg">
<meta name="twitter:image" content="http://example.com/social/image.jpg">

При проверке страницы в Twitter Card Validator и использовании? utm_source = a-random-number, чтобы убедиться, что он тянет страницу fre sh, он извлекает всю информацию правильно, кроме для изображения. Facebook отлично тянет изображение, это просто несовместимость твиттера с гибким общим SSL-шифрованием Cloudflare. Я не на WordPress и это на Apache. В настоящее время нет файла .htaccess. Есть идеи?

=============

РЕДАКТИРОВАТЬ

Хорошо, все заработало. Решение о добавлении: example.com/social/ - Отключить защиту в правилах SSL-страницы Cloudflare было правильным, но мне также пришлось включить в заголовок два параметра meta og:

<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />

без изображения не показывается в Twitter Card Validator, но отображается при добавлении. Надеюсь, что это поможет кому-то еще.

1 Ответ

0 голосов
/ 16 февраля 2020

Перенаправление l oop вызвано не исключением Twitterbot (которое просто предотвратит выполнение правила), а тем, что вы проверяете SERVER_PORT. При использовании «гибкого общего SSL-протокола Cloudflare» ваш сервер application всегда обменивается данными через порт 80 (ie. HTTP). Cloudflare - это SSL-прокси. Соединение между клиентом и Cloudflare является безопасным, но соединение между Cloudflare и вашим сервером приложений - нет. Ссылка: https://support.cloudflare.com/hc/en-us/articles/200170416#h_4e0d1a7c -eb71-4204-9e22-9d3ef9ef7fef

Вместо проверки SERVER_PORT, чтобы определить, не подключен ли клиент к HTTPS-соединению, следует проверить вместо этого X-Forwarded-Proto заголовок HTTP-запроса (устанавливается прокси Cloudflare). Ссылка: https://support.cloudflare.com/hc/en-us/articles/200170986-How-does-Cloudflare-handle-HTTP-Request-headers-

Например:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
RewriteCond %{HTTP_USER_AGENT} !twitterbot [NC]
RewriteRule (.*) https://www.example.com/$1 [R=301,L]

Я объединил два ваших условия, которые проверяют имя хоста (также избегает нужно для флага OR). Если вы не обслуживаете несколько доменов / поддоменов / имен хостов из этой учетной записи, то это условие вообще не требуется.

Перед тестированием вам необходимо очистить кеш браузера. (Тест с 302 - временным - перенаправляет, чтобы избежать проблем с кэшированием.)

...