如何检测社交网络并重定向到PHP以生成元标记

如何检测社交网络并重定向到PHP以生成元标记,php,apache,.htaccess,redirect,http-redirect,Php,Apache,.htaccess,Redirect,Http Redirect,我有一个网站是托管在 例如: 当facebook/twitter等社交网络机器人试图抓取该网站时,我需要它重定向到一个php文件,该文件生成正确的元标记。我试图用几种方式修改HTACCESS,但经过几次研究,我无法让Facebook/Twitter调试器读取它 .HTACCESS RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f Rewrite

我有一个网站是托管在

例如:

当facebook/twitter等社交网络机器人试图抓取该网站时,我需要它重定向到一个php文件,该文件生成正确的元标记。我试图用几种方式修改HTACCESS,但经过几次研究,我无法让Facebook/Twitter调试器读取它

.HTACCESS

RewriteEngine On
RewriteBase /

RewriteRule ^index\.html$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . app/index.html [L]

# allow social media crawlers to work by redirecting them to a server-rendered static version on the page
RewriteCond %{HTTP_USER_AGENT} (facebookexternalhit/[0-9]|Twitterbot|Pinterest|Google.*snippet)
RewriteRule album/(\d*)$ http://lab.example.com/app/opengraph.php [P]
OPENGRAPH.PHP测试

<?php


makePage();      

function makePage() {
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta property="og:title" content="Title Test" />
            <meta property="og:description" content="Description Test" />
            <meta property="og:image" content="http://68.media.tumblr.com/784fb357523d75590261ba6c5c19e6e7/tumblr_o8punbn6Qo1st5lhmo1_1280.jpg" />
            <!-- etc. -->
        </head>       
    </html>
    <?php
}

?>


希望有HTACCESS经验的人能帮我提供答案,不是你问了什么,而是你想实现什么


“OG元标记将出现在Index.html的每个页面上,只是我需要它在facebook/twitter试图删除它时有所不同。”

Twitter有自己的一套og标签

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="">
<meta name="twitter:description" content="">
<meta name="twitter:image" content="">

至于facebook,你需要做的就是检测用户代理

<?php
if(strpos($_SERVER['HTTP_USER_AGENT'],'facebookexternalhit')!==false){
 //Do Facebook Og
}
else{
 // Do basic Og
}
?>

提供答案,不是你问了什么,而是你想实现什么


“OG元标记将出现在Index.html的每个页面上,只是我需要它在facebook/twitter试图删除它时有所不同。”

Twitter有自己的一套og标签

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="">
<meta name="twitter:description" content="">
<meta name="twitter:image" content="">

至于facebook,你需要做的就是检测用户代理

<?php
if(strpos($_SERVER['HTTP_USER_AGENT'],'facebookexternalhit')!==false){
 //Do Facebook Og
}
else{
 // Do basic Og
}
?>


以最安全的方式为每个请求生成这些元标记。你无法预测现有和未来的机器人将使用哪个用户代理。而且谷歌真的,真的,真的不赞成人们向他们的机器人展示与普通用户不同的东西。你应该在每个pagwe上包括OG元标记,不管它是谁请求的。为每个请求生成元标记是什么意思?目前,我正试图避免使用任何预渲染服务——因为Facebook/Twitter在页面加载后不会读取javascript生成的元标记,所以我尝试采用这种方式。无论如何,我可能会删除谷歌,因为谷歌在单页应用程序中工作得更好。OG元标记将出现在Index.html上的每个页面上,只是我需要它在facebook/twitter试图删除它时有所不同。以最安全的方式为每个请求生成这些元标记。你无法预测现有和未来的机器人将使用哪个用户代理。而且谷歌真的,真的,真的不赞成人们向他们的机器人展示与普通用户不同的东西。你应该在每个pagwe上包括OG元标记,不管它是谁请求的。为每个请求生成元标记是什么意思?目前,我正试图避免使用任何预渲染服务——因为Facebook/Twitter在页面加载后不会读取javascript生成的元标记,所以我尝试采用这种方式。无论如何,我可能会删除谷歌,因为谷歌在单页应用程序中工作得更好。OG元标记将出现在Index.html上的每个页面上,只是我需要它在facebook/twitter试图删除它时有所不同。