没有.html扩展名的链接,无需创建目录

时间:2015-01-09 14:24:58

标签: html ruby markdown jekyll

我在Jekyll上运行网站。我想创建链接,例如contactcontact.md(现在我正在使用contact.html链接) - 这意味着我想删除.html扩展名。我读了这个问题 - How to link to a page with page.url without the html extension in Jekyll?,但它告诉我为每个文件夹创建目录。我不喜欢这个想法 - 我想把所有东西放在一个主目录中。你能给我任何建议吗?

3 个答案:

答案 0 :(得分:4)

这是正确的。静态网站总是必须有一个要呈现的页面。如果指定目录,大多数Web服务器都配置为查找index.html

如果您正在使用应用程序服务器(如Unicorn)并提供动态,那么您可以根据需要处理请求,但Nginx和Apache等Web服务器将在磁盘上查找文件。

因此:

example.com/contact.html

实际上会成为:

example.com/contact/index.html

但你可以省略文件名,而网络服务器会弄明白:

example.com/contact

答案 1 :(得分:0)

permalink是您的解决方案。

See my answer here为简短说明。

答案 2 :(得分:0)

您可以在Jekyll中设置固定链接处理以任何您想要的方式。首先,查看Jekyll的内置permalink support,其格式为(例如)

permalink: blah/:title

或者

permalink: /:categories/:title

将说服杰基尔开始发布无扩展的永久链接。然后清理Jekyll在该方案下创建的浪费/foo/index.html结构,使用Will Norris的jekyll-clean-urls(或我自己的jekyll-simple-urls)来获得更原始的方法。其基本思路是根据需要选择性地将/foo/index.html替换为/foo.html

module Jekyll
   class Post
       # Obtain destination path, using clean URLs if requested.
       #
       # By default, Jekyll will treat /:title permalinks the same as /:title/,
       # using a destination file of /:title/index.html.  Instead, we change the
       # destination file to /:title.html if clean URLs are requested.
    def destination_with_clean_urls(dest)
       path = destination_without_clean_urls(dest)
      path.sub!(/\/index.html$/, '.html') if clean_urls?(permalink)
      path
    end

    alias_method :destination_without_clean_urls, :destination
    alias_method :destination, :destination_with_clean_urls

然后,您可以使用MultiViews或简单的重写(或完整的hog并提供无扩展的HTML文件),以确保/foo的请求产生/foo.html。如果您通过Yeoman使用jekyll serveconnect中间件,则需要进行一些额外的调整,但这就是想法。