我有一个名为的站点地图http://www.domain.com/sitemap1.php. 它以以下代码开头:
<?php
echo '<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="http://www.weddingpages.nl/sitemap.xsl"?><urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/09/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
';
从 Apache 迁移到 Nginx 后,Google 网站管理员工具开始拒绝我的站点地图,告诉我它们看起来像 HTML 页面。
当我查看输出时,我发现了一些奇怪的事情。
使用 Nginx:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="http://www.weddingpages.nl/sitemap.xsl"?><head/><urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/09/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
使用 Apache:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="http://www.weddingpages.nl/sitemap.xsl"?><urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/09/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
出于某种原因,我不明白 Nginx 抛出的
<head/>
就在 urlset 之前。
有人知道这是什么原因吗?我担心这就是问题的原因。但即使搜索了,我也没有找到答案。
答案1
我不知道自己回答这个问题是否正确。但几天后我终于找到了解决方案。
我要感谢 Alexey Ten 提到了“模块”这个词。看来 pagespeed 模块就是问题所在。在 nginx 配置文件中禁用 pagespeed 解决了这个问题。我读到 pagespeed 只会更改 html,所以 pagespeed 可能认为这个 xml 输出是 html。我再次启用 pagespeed 并添加:
header('Content-Type: text/xml');
在 .php 文件中。现在一切正常。奇怪的是,我也使用带有 pagespeed 模块的 Apache,但从未遇到过此问题。Nginx 与 Apache 相比,pagespeed 行为可能有所不同。