将站点强制为HTTPS,但某些页面和Facebook爬虫除外

时间:2017-12-31 12:04:45

标签: .htaccess http ssl https

有一些类似的问题,但没有一个真正涵盖我需要做的一切,我有点过头了! 我有一个现有的wordpress网站。我想强制将主页和任何子页面强制为HTTPS,但强制现有的子页面(大约20个)到HTTP。这些子页面的原因有很长的Facebook评论主题,我不想丢失,而规范的解决方案只保留喜欢/分享,而不是评论。为了保留喜欢/分享,Facebook抓取工具需要能够访问主页的HTTP版本。

所以我需要编写htaccess的代码来启用:   1。强制网站通常为HTTPS   2. 强制某些网页为HTTP   3. 允许Facebook抓取工具访问主页的HTTP版本(仅限)。

任何帮助非常感谢。 编辑添加了我认为我试过的代码,但是没有:

RewriteEngine On 
# Go to https for all but existing subpages
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^ page1 | page2 | page3 $ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 

# Go to http for existing subpages 
RewriteCond %{SERVER_PORT} !80 
RewriteCond %{REQUEST_URI} ^ page1 | page2 | page3 $ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R,L]

不确定Facebook抓取工具例外的位置,也不确定我是否有正确的语法来排除网页,请记住它是一个wordpress网站。

2 个答案:

答案 0 :(得分:0)

您可以查看facebook抓取工具用户代理,list here

# Go to http for home page if Facebook Crawler
RewriteCond %{SERVER_PORT} !80
RewriteCond %{HTTP_USER_AGENT} ^facebookexternalhit|Facebot
RewriteRule ^$ http://www.example.com/ [R,L]

RewriteCond %{HTTP_USER_AGENT} ^facebookexternalhit|Facebot
RewriteRule ^$ - [L]

# Go to https for all but existing subpages
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^/(page1|page2|page3)$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

# Go to http for existing subpages 
RewriteCond %{SERVER_PORT} !80
RewriteCond %{REQUEST_URI} ^/(page1|page2|page3)$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R,L]

答案 1 :(得分:0)

谢谢@ben,这几乎完美无缺。我需要做的唯一改变是为我想要重定向的每个页面名称添加斜杠,因为我在没有它们的情况下得到404错误。我假设因为wordpress URL格式化。所以完整的工作代码是:

# Go to http for home page if Facebook Crawler
RewriteCond %{SERVER_PORT} !80
RewriteCond %{HTTP_USER_AGENT} ^facebookexternalhit|Facebot
RewriteRule ^$ http://www.example.com/ [R,L]

RewriteCond %{HTTP_USER_AGENT} ^facebookexternalhit|Facebot
RewriteRule ^$ - [L]

# Go to https for all but existing subpages
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^/(page1/|page2/|page3/)$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

# Go to http for existing subpages 
RewriteCond %{SERVER_PORT} !80
RewriteCond %{REQUEST_URI} ^/(page1/|page2/|page3/)$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R,L]

我还在主页的头部添加了一个og:url标记,指示Facebook抓取HTTP版本,保持原始版本和共享计数。