Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 使用cloudflare SSL时如何不重定向Twitterbot?_.htaccess_Ssl_Twitter_Cloudflare - Fatal编程技术网

.htaccess 使用cloudflare SSL时如何不重定向Twitterbot?

.htaccess 使用cloudflare SSL时如何不重定向Twitterbot?,.htaccess,ssl,twitter,cloudflare,.htaccess,Ssl,Twitter,Cloudflare,Twitter卡(Twitter:image或og:image)不允许来自包括Cloudflare在内的共享SSL的https。提到的解决方法是创建一个.htaccess文件,并将代码添加到not将twitterbot重定向到共享https。问题是,这是打破我的网页说,有太多的重定向 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteCond %{HTTP_HOST} ^exa

Twitter卡(Twitter:image或og:image)不允许来自包括Cloudflare在内的共享SSL的https。提到的解决方法是创建一个.htaccess文件,并将代码添加到not将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>

重新启动发动机
重写cond%{SERVER_PORT}80
RewriteCond%{HTTP_HOST}^example.com[NC,OR]
重写cond%{HTTP_HOST}^www.example.com[NC]
RewriteCond%{HTTP\u USER\u AGENT}!推特机器人[NC]
重写规则^(.*)$https://www.example.com/$1[L,R=301,北卡罗来纳州]
这就是说,当我使用.htaccess代码通过Twitter卡验证程序运行页面时,图像确实会在Twitter卡验证程序上显示良好。但正如我提到的,网站因为太多的重定向而崩溃

<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>
我尝试删除.htaccess代码,将twitter卡图像放入名为/social/的目录中,并将此页面规则作为第一条规则放入Cloudflare:example.com/social/-Disable Security(每页只有一条规则有效),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卡验证程序上验证页面并使用?utm_source=a-random-number确保它正在拉取一个新页面时,它会正确地拉取除图像之外的所有信息。Facebook很好地处理了这个图像,这只是twitterbot与Cloudflare灵活的共享SSL不兼容。我不是在WordPress上,这是在Apache上。当前没有.htaccess文件。有什么想法吗

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

编辑

好的,开始工作了。添加以下内容的解决方案: example.com/social/-禁用安全性 Cloudflare的SSL页面规则是正确的,但我还必须在头部包含两个meta og参数:

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


如果没有这一点,图像将不会显示在Twitter卡验证程序上,但当您添加它时会显示。希望这对其他人有所帮助。

重定向循环不是由Twitterbot异常引起的(这只会阻止执行规则),而是因为您正在检查
服务器\u端口。使用“Cloudflare的灵活共享SSL”时,您的应用程序服务器始终在端口80(即HTTP)上通信。Cloudflare是一个SSL代理。从客户端到Cloudflare的连接是安全的,但从Cloudflare到应用程序服务器的连接不是安全的。参考:

您不应该检查
SERVER\u端口
来确定客户端是否还没有进行HTTPS连接,而应该检查
X-Forwarded-Proto
HTTP请求头(由Cloudflare代理设置)。参考:

例如:

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]
我结合了检查主机名的两个条件(也避免了使用
标志)。除非您从该帐户提供多个域/子域/主机名,否则根本不需要该条件


在测试之前,您需要清除浏览器缓存。(使用302-临时-重定向以避免缓存问题进行测试。)

重定向循环不是由Twitterbot异常引起的(这只会阻止执行规则),而是因为您正在检查
服务器\u端口。使用“Cloudflare的灵活共享SSL”时,您的应用程序服务器始终在端口80(即HTTP)上通信。Cloudflare是一个SSL代理。从客户端到Cloudflare的连接是安全的,但从Cloudflare到应用程序服务器的连接不是安全的。参考:

您不应该检查
SERVER\u端口
来确定客户端是否还没有进行HTTPS连接,而应该检查
X-Forwarded-Proto
HTTP请求头(由Cloudflare代理设置)。参考:

例如:

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]
我结合了检查主机名的两个条件(也避免了使用
标志)。除非您从该帐户提供多个域/子域/主机名,否则根本不需要该条件


在测试之前,您需要清除浏览器缓存。(使用302-临时-重定向进行测试,以避免缓存问题。)

谢谢@MrWhite,不幸的是它仍然给出了太多重定向错误。在另一台电脑上也进行了检查。不确定是什么导致了这个问题。再次感谢。hhmm,您的
.htaccess
文件中是否有其他指令?(尽管我假设不是从您的问题中)检查应用程序接收的HTTP请求头和/或如果您使用的是PHP,通过HTTP和HTTPS访问您的站点时,转储
$\u服务器
superglobal的内容,该服务器将包含您需要的所有信息,以便在
.htaccess
中确定所需的HTTP到HTTPS重定向。同时检查浏览器中的网络流量,以确定重定向的确切性质。例如,from/to,from/to,等等。我假设它反复重定向到自身(即HTTPS)。但是,如果应用程序本身中有重定向逻辑,那么它可能是HTTP到HTTPS到HTTP到HTTPS到HTTP。。。。等等,再次感谢。我刚刚得到了我的网络主机的支持。他们仔细查看了所有内容,并表示该循环是由cloudflare灵活的SSL造成的。他们告诉我需要在那里创建一个没有.htaccess代码的设置。我已经试过了,但是twitterbot仍然没有显示og:图像。在Facebook上运行良好。然后,使用cloudflare页面规则将图像放在一个特殊目录中,不将其重定向到https,但不确定还能做什么。如果我解决了这个问题,我会继续尝试并报告。再次感谢。谢谢@MrWhite,不幸的是它仍然给出了太多的重定向错误。在另一台电脑上也进行了检查。不确定是什么导致了这个问题。再次感谢。hhmm,您的
.htaccess
文件中是否有其他指令?(虽然我假设不是从你的问题