我正在尝试使用site.pages在Jekyll(GitHub Pages)中自动生成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>


我的目标是生成一个sitemap.xml,而不在注释行中尾随.html。我尝试了gsub(我假设Jekyll采用Ruby语法:Replace words in string - ruby),但似乎没有任何改变或完全删除了page.url。

如果有人可以,我将不胜感激


修改Jekyll语法,以便它生成没有尾随.html的URL。
说明| remove: 'index.html'的语法(从生成的https://example.com/index.html中删除​​URL sitemap.xml)。


我对杰基尔(Jekyll)非常陌生,因此如果这个问题显得微不足道,我深表歉意。

最佳答案

Jekyll使用Liquid来process templates。管道语法为Liquid filter


过滤器是简单的方法。第一个参数始终是过滤器左侧的输出。运行下一个过滤器时,过滤器的返回值将是新的左侧值。如果没有更多过滤器,模板将接收结果字符串。


removestandard 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

关于jekyll - 如何使用Jekyll site.pages生成sitemap.xml,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31774327/

10-14 13:13