我尝试使用site.pages在Jekyll(GitHub页面)中自动生成sitemap.xml
,这是我得到的sitemap.xml
代码:
---
---
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% for page in site.pages %}
<url>
<loc>https://example.com{{ page.url | remove: 'index.html' }}</loc>
</url>
{% endfor %}
</urlset>
它的输出类似于:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/samplepage.html</loc>
<!--<loc>https://example.com/samplepage</loc>-->
</url>
</urlset>
我的目标是生成一个没有跟踪.html
的sitemap.xml,如注释行所示。我已经尝试gsub
(我假设Jekyll使用Ruby语法:Replace words in string - ruby)但似乎要么没有改变任何内容,要么完全删除page.url。
如果有人能
,我会很感激.html
的网址。| remove: 'index.html'
的语法(从生成的https://example.com/index.html
中删除网址sitemap.xml
)。我对Jekyll非常不熟悉,如果这个问题看似微不足道,那么道歉。
答案 0 :(得分:2)
Jekyll使用Liquid来process templates。管道语法是Liquid filter:
过滤器是简单的方法。第一个参数始终是过滤器左侧的输出。运行下一个过滤器时,过滤器的返回值将是新的左值。当没有更多过滤器时,模板将收到结果字符串。
remove
是standard Liquid filters之一,因此Jekyll文档没有列出它。
如果您的根文件夹中包含此文件,则页面URL很简单:
samplepage.html # https://example.com/samplepage.html
相反,如果你有:
samplepage/
index.html # https://example.com/samplepage/index.html
# https://example.com/samplepage/
页面URL最终是文件夹名称,如果您使用第二个链接,服务器将自动提供内部的index.html
文件。
site.pages
将为您提供第一个链接。如果您有一个从路径中删除index.html
的过滤器,则最终会得到extension-free URLs。
答案 1 :(得分:1)
Jekyll文件夹中的任何文件都是使用其扩展名生成的,除非您使用permalink。
如果您创建这样的sitemap.xml
文件:
---
layout: null
---
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% for page in site.pages %}
<url>
<loc>https://example.com{{ page.url | remove: 'index.html' }}</loc>
</url>
{% endfor %}
</urlset>
它将生成为sitemap.xml
。
您也可以使用github页面支持的jekyll-sitemap。