我正在尝试创建一个会自动更新的站点地图.我做了类似于我的RSS提要的事情,但这个网站地图拒绝工作.您可以在http://designdeluge.com/sitemap.xml上查看它.我认为主要问题是它无法识别PHP代码.这是完整的来源:
<?php
include 'includes/connection.php';
header("Content-type: text/xml");
echo '<?xml version="1.0" encoding="UTF-8" ?>';
?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">
<url>
<loc>http://designdeluge.com/</loc>
<lastmod>2010-04-20</lastmod>
<changefreq>weekly</changefreq>
<priority>1.00</priority>
</url>
<url>
<loc>http://designdeluge.com/about.php</loc>
<lastmod>2010-04-20</lastmod>
<changefreq>never</changefreq>
<priority>0.5</priority>
</url>
<?php
$entries = mysql_query("SELECT * FROM Entries");
while($row = mysql_fetch_assoc($entries)) {
$title = stripslashes($row['title']);
$date = date("Y-m-d", strtotime($row['timestamp']));
echo "
<url>
<loc>http://designdeluge.com/".$title."</loc>
<lastmod>".$date."</lastmod>
<changefreq>never</changefreq>
<priority>0.8</priority>
</url>";
} ?>
</urlset>
Run Code Online (Sandbox Code Playgroud)
问题是动态URL(例如从数据库中提取的URL)没有生成,站点地图也不会验证.谢谢!
编辑:现在,我只是想让代码本身工作.我把它设置为我本地测试服务器上的PHP文件.上面的代码正在使用中.现在,屏幕上或源中没有显示任何内容.我想我的语法错误,但我找不到任何东西.任何和所有的帮助表示赞赏!
编辑2:好的,我把它整理好了.显然,我不得不用PHP回应xml声明.最终代码发布在上面.谢谢你的帮助!
Pas*_*TIN 31
如果您查看sitemap.xml生成的内容(例如,在浏览器中使用视图源),您会看到:
<?php header('Content-type: text/xml'); ?>
<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http:/
...
Run Code Online (Sandbox Code Playgroud)
的<?php,存在于该输出,显示,PHP代码不被解释.
这可能是因为您的Web服务器无法识别.xml应包含PHP代码的文件的扩展名.
至少两种可能的解决方案:
sitemap.php例如,更改站点地图的扩展名,以便服务器对其进行解释.
我想添加另一个解决方案:
sitemap.php包含代码的文件sitemap.xmlURL实际指向该sitemap.php文件有了它,你将拥有一个sitemap.xml很好的URL (必需?),但是随着代码的进入sitemap.php,它将得到解释.
最简单的解决方案是将以.htaccess下行添加到您的 apache文件中RewriteEngine On
RewriteRule ^sitemap\.xml$ sitemap.php [L]
Run Code Online (Sandbox Code Playgroud)
然后只需sitemap.php在您的根文件夹中放置一个文件,该文件通常可以通过http://yoursite.com/sitemap.xml,所有搜索引擎将首先搜索的默认 URL访问。
该文件sitemap.php应以
<?php header('Content-type: application/xml; charset=utf-8') ?>
<?php echo '<?xml version="1.0" encoding="UTF-8"?>' ?>
Run Code Online (Sandbox Code Playgroud)
我使用过威廉的代码(谢谢),经过一些小修改,它对我有用.
我认为这句话:
header("Content-type: text/xml");
Run Code Online (Sandbox Code Playgroud)
应该是顶部之后的第二行 <?php
顺便说一句,对于复制它的其他任何人来说只是一个小点,但<?php在第一行之前有一个空格字符- 如果你像我一样无意中复制它,你会花一点时间试图弄清楚为什么代码不适合你!
我不得不稍微调整一下MySql select语句.
最后,在输出中,我使用了一个变量$ domain,这样这段代码就可以用作模板,而不需要考虑它(前提是你每次都使用相同的表名).变量被添加到connectdb.php文件中,该文件包含在连接数据库中.
这是William的代码的工作版本:
<?php
header("Content-type: text/xml");
echo '<?xml version="1.0" encoding="UTF-8" ?>';
include 'includes/connectdb.php';
?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">
<url>
<loc>http://www.DOMAIN.co.uk/</loc>
<priority>1.00</priority>
</url>
<?php
$sql = "SELECT * FROM pages WHERE onshow = 1 ORDER BY id ASC";
$result = mysql_query($sql,$conn);
while($row = mysql_fetch_array($result))
{
$filename = stripslashes($row['filename']);
?>
<url>
<loc>http://www.<?php echo "$domain"; ?>/<?php echo "$filename" ?></loc>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<?php } ?>
</urlset>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54615 次 |
| 最近记录: |