【发布时间】:2011-07-02 11:52:47
【问题描述】:
我的网站是使用 XML 作为数据存储创建的,并使用 XSLT 作为模板。谷歌似乎在索引基于 XML/XSLT 的网站方面不是很好。是否有任何高效/易于实现的软件组件可以仅为 Google bot 索引器呈现 XSLT?如果他们使用 PHP,那就更好了。
【问题讨论】:
-
dimitre...我可以同意您对 xsltprocessor 标签的看法。谢谢!
我的网站是使用 XML 作为数据存储创建的,并使用 XSLT 作为模板。谷歌似乎在索引基于 XML/XSLT 的网站方面不是很好。是否有任何高效/易于实现的软件组件可以仅为 Google bot 索引器呈现 XSLT?如果他们使用 PHP,那就更好了。
【问题讨论】:
看看 PHP XSLT 处理器。
http://php.net/manual/en/class.xsltprocessor.php
如下使用:
<?php
$sXml = "<xml>";
$sXml .= "<sudhir>hello sudhir</sudhir>";
$sXml .= "</xml>";
# LOAD XML FILE
$XML = new DOMDocument();
$XML->loadXML( $sXml );
# START XSLT
$xslt = new XSLTProcessor();
$XSL = new DOMDocument();
$XSL->load( 'xsl/index.xsl', LIBXML_NOCDATA);
$xslt->importStylesheet( $XSL );
#PRINT
print $xslt->transformToXML( $XML );
?>
(来自http://php.net/manual/en/book.xsl.php)
更新
您在评论中询问如何拦截来自特定用户代理(例如 Googlebot)的请求。有多种方法可以做到这一点,具体取决于您使用的 Web 服务器技术。
在 Apache 上,一种方法是使用 mod_rewrite 在内部将请求的处理转移到包含类似于我们上面看到的代码的 PHP 脚本。此脚本从最初请求的 URL 中检索 XML,并将转换呈现给客户端。重写规则将有一个Rewrite Condition,它将 HTTP_USER_AGENT 标头与 Google 的标头进行比较。这是规则的一个示例(未经测试,但您应该明白):
RewriteCond %{HTTP_USER_AGENT} ^(.*)Googlebot(.*)$ [NC]
RewriteRule ^(.*\.xml.*)$ /renderxslt.php?url=$1 [L]
简而言之,条件是寻找以字符串“googlebot”开头的引荐来源网址,重写规则是匹配其中包含字符串“.xml”的任何 URL,并将完整 URL 作为查询字符串参数。
IIS 的 mod_rewrite 端口也存在 (http://www.isapirewrite.com/)。
或者,使用 IIS,您可以使用 ASP.NET HTTP module 拦截请求,再次检查 Request.Headers["HTTP_USER_AGENT"] 以获取 Google 的签名。然后,您可以通过阅读 PHP 脚本生成的 HTML 或使用 ASP.NET XML 控件以与上述类似的方式继续操作:
<asp:Xml ID="Xml1" runat="server" DocumentSource="~/cdlist.xml" TransformSource="~/listformat.xsl"></asp:Xml>
【讨论】:
为什么不直接排除 robots.txt 中保存 xsl 文件的目录?
【讨论】: