【发布时间】:2014-02-10 06:24:09
【问题描述】:
我正在使用 GitHub 页面来托管我的最新网站:
http://mysite.github.io/
我想知道是否有办法从子页面的末尾删除 .html 扩展名:
http://mysite.github.io/contact.html
因为无法访问服务器。
【问题讨论】:
标签: github github-pages
我正在使用 GitHub 页面来托管我的最新网站:
http://mysite.github.io/
我想知道是否有办法从子页面的末尾删除 .html 扩展名:
http://mysite.github.io/contact.html
因为无法访问服务器。
【问题讨论】:
标签: github github-pages
我不确定您是否已经意识到这一点,但要从 GitHub Pages 中删除 .html 扩展名,您所要做的就是从您的链接中删除 .html 扩展名。
换句话说,它已经有效,您无需执行任何操作。您不必使用子目录、CNAME、重定向、Jekyll _config.yml、YAML front-matter 或此处所有答案中建议的任何其他 hack。
例如你可以使用:
代替:
它会显示相同的文件。 只需更改链接中的链接即可。
我做了一些测试来演示它是如何真正工作的,您可以点击链接并突出显示哪个文件加载了哪个 URL,包括在某些情况下有关不安全重定向的警告。
例如,链接:
显示它是由URL中的test1显示的,但实际上显示的是文件test1.html:
在其他答案中建议的特殊子目录中使用 index.html 之类的东西不会做你想做的事,这只是在要求example.com/name 时提供example.com/name.html,而是会给你一个301重定向到@ 987654339@(注意尾部的斜杠)这反过来会给你example.com/name/index.html文件的内容。
这会导致以下问题:您位于不同的目录中,您需要使用<a href="../name"> 而不是仅使用<a href="name"> 来链接到同一级别的其他页面,并且所有资产也是如此(或者您可以像有人建议的那样使用绝对路径,这在 GitHub 页面(尤其是项目页面)上不是一个好主意,因为在分叉和项目重命名之后,您必须记住更新所有 html 文件中的所有链接和 js/css 资产)。
另一件事是,现在您对每个导航都有一个无用的重定向 - 它顺便将 从 HTTPS 重定向到 HTTP(从安全 URL 没有斜杠 to带有斜线的不安全 URL),例如见:
(在撰写本文时)重定向到:
并且不:
如您所料,请确保您了解这一点。看: (请注意,此图片链接到安全的 HTTPS URL,但您最终使用了不安全的 HTTP 连接 - 您可能需要使用隐身模式才能看到这一点。)
截至 2016 年 6 月 17 日,标题如下所示:
$ curl -I https://rsp.github.io/gh-pages-no-extension/dir
HTTP/1.1 301 Moved Permanently
Server: GitHub.com
Content-Type: text/html
Location: http://rsp.github.io/gh-pages-no-extension/dir/
... ^^^^
希望 GitHub 将来能解决这个问题。 (大约一年前我在写这个答案时发现了它,到 2016 年 6 月这个问题仍然存在。)
虽然奇怪的是,截至 2016 年 6 月 17 日(我不确定是否总是如此,因为我最近在更新此答案时注意到了)此 URL:
重定向到:
应该如此。见标题:
$ curl -I https://rsp.github.io/gh-pages-no-extension
HTTP/1.1 301 Moved Permanently
Server: GitHub.com
Content-Type: text/html
Location: https://rsp.github.io/gh-pages-no-extension/
... ^^^^^
唯一的区别是它是一个项目根 URL,而不是项目内部的更深目录(请参阅the project structure),因此错误重定向似乎只存在于项目 GitHub 页面内的深层链接中,并且在我的一个浏览器上仅在您使用隐身模式时进行测试。
底线是您需要小心。我的建议是完全避免所有重定向,并且只使用那些根本不会导致任何重定向的 URL。
【讨论】:
.html”而不是“.htm”,否则它不起作用。
/ 而从不链接到 /index 或 index.html,那么它永远不会到达那里,但如果有这样的链接,那么它可以去那里并索引一个副本。请注意,对于每个带有/ 和/index.html 的服务器都是如此——这里有第三个/index 添加到这两个服务器上。为避免 Google 索引重复,您可以使用规范网址 - 请参阅:support.google.com/webmasters/answer/139066?hl=en
我假设您必须使用子目录(但可能有更简单的方法):
/index.html => http://jasonhoffmann.github.io
/contact/index.html => http://jasonhoffmann.github.io/contact
但是,您可以使用 CNAME 将 GitHub 页面重定向到您自己的 domain 进行更多控制。抱歉,我没有给你一个明确的答案,但希望这可以让你开始。
【讨论】:
您可以通过 Jekyll 来做到这一点,这是一个内置在 GitHub Pages 中的静态站点生成器。它有一些permalink settings,可以在_config.yml(这将影响您网站上的所有页面和帖子)或YAML front-matter 中为每个页面/帖子设置。
例如,您可以将以下代码添加到您的 contact.html 文件中:
---
permalink: contact/
---
这将被插入到 <!DOCTYPE html> 之前,但 Jekyll 会在它在 GitHub Pages 上提供时小心地将其删除。执行此操作后,您将能够访问jasonhoffman.github.io/contact 而不是jasonhoffman.github.io/contact.html 的页面。 Jekyll 实际上在做的是创建一个名为contact 的目录,并在其中放入一个index.html 文件,其中包含您的contact.html 内容。如果你install and run Jekyll locally,你会看到:
.
|- _config.yml (optional)
|- contact.html
|- index.html
|- css
|- styles.css
|- img
|- image.jpg
|- _site
|- index.html
|- contact
|- index.html
|- css
|- styles.css
|- img
|- image.jpg
如果你没有在本地安装 Jekyll,你会看到所有这些,减去 _site 文件夹。当您将其推送到 GitHub 时,他们的服务器将运行 Jekyll 并为您生成和提供相当于 _site 的文件夹(但它不会在您的 GitHub 存储库中可见)。
您也可以跳过 Jekyll,创建一个 contact 子目录,其中包含 index.html。无论哪种方式,您还需要确保您网站中任何指向资产(img、css、js)的链接前面都有/。例如,
<link rel="stylesheet" href="css/style.css">
应该是
<link rel="stylesheet" href="/css/style.css">
【讨论】:
我正在使用arctic fox theme,其中uses following link strings:
<a class="page-link" href="{{ page.url | prepend: site.baseurl }}">{{ page.title }}</a>
解决方案是添加remove: '.html'作为过滤器,结果是
<a class="page-link" href="{{ page.url | remove: '.html' | prepend: site.baseurl }}">{{ page.title }}</a>
Local serving with Jekyll 目前不起作用,但承诺用于 Jekyll 3.0:https://github.com/jekyll/jekyll/pull/3452
【讨论】:
.html 扩展时,这是要走的路,谢谢!
现在,您只需添加permalink: /your-pretty-url
另一个答案不起作用。我试过了。您需要添加“/”前缀。
例如:
---
layout: post
title: "Welcome to Jekyll!"
date: 2017-04-29 22:04:31 +0700
categories: jekyll update
permalink: /welcome
---
【讨论】:
permalink: pretty 是要走的路 jekyllrb.com/docs/permalinks
正如用户 rsp 提到的,漂亮的永久链接已经由 GitHub Pages 实现,并且不需要做任何事情,在本地或默认情况下在 Jekyll 中运行 Jekyll 服务器时不会这样做。如果你想在自己的非 Github Pages 站点(仍然由 Jekyll 提供)中使用 Jekyll 从页面中删除 html 扩展,或者在推送到 GitHub 之前尽可能有一个类似于 Github Pages 的本地开发站点,
您只需将其添加到 _config.yml 文件:
permalink: pretty
这通过使所有帖子都有自己的文件夹并将帖子命名为 index.html 来从链接中删除 .html。
【讨论】:
page.url | remove: '.html'。本地服务将适用于 Jekyll 3.0 及更高版本:github.com/jekyll/jekyll/pull/3452
通过将永久链接更改为删除 .html 扩展名
permalink: /:title/
别忘了最后一个/
【讨论】:
您可以做一件简单的事情,那就是创建一个包含您的 html 文件名的文件夹...在您的情况下,它将是 /contacts。然后将您的contacts.html 重命名为index.html,然后将其移动到您创建的/contacts 文件夹中。
输出:
http://mysite.github.io/contact
【讨论】: