我在Jekyll上运行网站。我想创建链接,例如contact
到contact.md
(现在我正在使用contact.html
链接) - 这意味着我想删除.html扩展名。我读了这个问题 - How to link to a page with page.url without the html extension in Jekyll?,但它告诉我为每个文件夹创建目录。我不喜欢这个想法 - 我想把所有东西放在一个主目录中。你能给我任何建议吗?
答案 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 serve
或connect
中间件,则需要进行一些额外的调整,但这就是想法。