可以';t生成XML站点地图


Can't generate XML sitemap

我已经编写了一些用于生成网站地图的PHP代码。在VPS问题迫使我重新安装操作系统(并更新我的VPS)之前,此代码运行良好。现在,相同的代码不会在根目录中生成所需的sitemap1.xml。

function write_xml($url,$priority = 0.7)
    {
    global $handle, $counter, $file_number, $filename;
   if($counter == 50000)
        {
        $file_number++;
        $counter = 0;
        // Attach end of file, and close it here.
        fwrite($handle,"</urlset>'n");
        fclose($handle);
        }
    if($counter == 0)
        {
       // Open next file here.
        $filename = "sitemap" . $file_number . ".xml";
        $handle = fopen($filename,"w+");
        fwrite($handle,'<?xml version="1.0" encoding="UTF-8"?>' . "'n");
        fwrite($handle,'<urlset xmlns="http://www.google.com/schemas/sitemap/0.9">' . "'n");
        }
    if($url != "" && $url != "END")
        {
        fwrite($handle,"'t <url>'n");
        fwrite($handle,"'t't<loc>$url</loc>'n");
        fwrite($handle,"'t't<priority>$priority</priority>'n");
        fwrite($handle,"'t</url>'n");
        }
    if($url == "")
        {
        fwrite($handle,"</urlset>'n");
        fclose($handle);
        }
// Increment counter for every URL.
    $counter++;
    }
    ?>

请帮助我理解为什么URL没有写入sitemap1.xml文件。

代码似乎运行良好。问题一定出在调用write_xml的代码中。

只是一些小的最佳实践-而不是这个:

if($counter == 50000)

使用更安全:

if ($counter >= 50000)

根文件夹中的权限肯定有问题。在许多配置中,根文件夹属于帐户所有者,但apache进程以用户"nobody"的身份运行。这里有两个选择:

  • 将站点地图创建到一个子文件夹中,该子文件夹对每个人都具有写入权限(0777),并使用htaccess中的规则将机器人指向正确的方向:

重写引擎打开重写规则^站点地图(.*).xml子文件夹/站点地图$1.xml[L]

  • 作为帐户所有者,首先在根目录上创建所有xml文件,然后将其权限更改为每个人都可以写入:0666

或者,您可能希望动态生成站点地图,并通过脚本交付它们。在这种情况下,他们的url会像sitemap.xml吗?page=1,但您仍然需要在.htaccess中为其设置一个规则