从GitHub页面中删除html扩展名

Jas*_*ann 31 github github-pages

我正在使用GitHub页面来托管我的最新网站(http://jasonhoffmann.github.io/).我想知道是否有办法从子页面的末尾删除.html扩展名(http://jasonhoffmann.github.io/contact.html),因为无法访问服务器.

rsp*_*rsp 83

它已经有效,您无需做任何事情

我不确定您是否已经知道这一点,但是要从GitHub页面中删除.html扩展名,您只需从链接中删除.html扩展名即可.

换句话说,它已经有效,你不需要做任何事情.您不必使用子目录,CNAME,重定向,Jekyll _config.yml,YAML前端内容或此处所有答案中建议的任何其他黑客.

例子

例如,您可以使用:

代替:

它显示相同的文件.只需更改链接中的链接就可以了.

测试

我做了一些测试来演示它如何真正起作用,你可以点击链接,它突出显示哪个文件加载了哪个URL,包括在某些情况下有关不安全重定向的警告.

对于eaxample,链接:

显示它由test1URL显示,但实际显示文件test1.html: 在此输入图像描述

其他解决方案的问题

在其他答案中使用像其他答案中建议的特殊子目录中的index.html这样的东西将不会做你想要的,这只是在example.com/name.html被要求时服务example.com/name,而是给你301重定向example.com/name/(注意尾随斜线)反过来给你example.com/name/index.html文件的内容.

这会导致以下问题:您位于不同的目录中,您需要使用<a href="../name">而不仅仅是<a href="name">用于指向同一级别的其他页面的链接,并且所有资产都是如此(或者您可以使用绝对路径作为某人建议的不是关于GitHub页面的一个好主意 - 特别是项目页面 - 因为在重新命名的forks和项目之后你必须记住更新所有html文件中的所有链接和js/css资产).

另一件事是,现在每个导航都有一个无用的重定向 - 顺便从HTTPS重定向到HTTP(没有斜线的安全 URL到带有斜杠的不安全 URL),例如:

(在撰写本文时)重定向到:

不是:

正如您所料,所以请确保您知道这一点.看到: 不安全的重定向 (请注意,此图片链接到安全的HTTPS网址,但您最终使用的是不安全的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/
...       ^^^^
Run Code Online (Sandbox Code Playgroud)

希望GitHub将来会解决这个问题. (我在大约一年前写这个答案时就发现了这个问题,截至2016年6月,这个问题仍然存在.)

虽然奇怪的是,截至2016年6月17日(我不确定是否总是如此,因为我最近在更新此答案时注意到了这个)这个网址:

重定向到:

正如它应该.查看标题:

$ 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/
...       ^^^^^
Run Code Online (Sandbox Code Playgroud)

唯一的区别是它是一个项目根URL而不是项目内部的更深层目录(参见项目结构)所以错误重定向似乎只出现在项目的GitHub页面内的深层链接中,并且只在我测试的一个浏览器上出现你使用隐身模式.

最重要的是你需要小心.我的建议是完全避免所有重定向,只使用那些根本不会导致重定向的URL.


Sam*_*Sam 13

我认为你必须使用子目录(但可能有一个更简单的方法):

/index.html            => http://jasonhoffmann.github.io
/contact/index.html    => http://jasonhoffmann.github.io/contact
Run Code Online (Sandbox Code Playgroud)

但是,您可以使用CNAME将GitHub页面重定向到您自己的,从而获得更多控制权.对不起,我没有给你一个明确的答案,但希望这可以让你开始.


nic*_*uch 6

您可以通过Jekyll执行此操作,这是GitHub Pages中内置的静态站点生成器.它有一些永久链接设置,可以设置在_config.yml(这将影响您网站上的所有页面和帖子)或每个页面/帖子的YAML前端内容中.

例如,您可以将以下代码添加到您的contact.html文件中:

---
permalink: contact/
---
Run Code Online (Sandbox Code Playgroud)

这将在之前插入<!DOCTYPE html>,但是Jekyll会在GitHub页面上提供它时将其删除.执行此操作时,您将能够访问该页面jasonhoffman.github.io/contact而不是jasonhoffman.github.io/contact.html.Jekyll实际上在做的是创建一个名为的目录,contact并在其中放入一个index.html包含contact.html内容的文件.如果您在本地安装并运行Jekyll,那么您将看到:

.
|- _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
Run Code Online (Sandbox Code Playgroud)

如果你没有在本地安装Jekyll,你会看到所有这些,减去_site文件夹.当你将它推送到GitHub时,他们的服务器将运行Jekyll并_site为你生成并提供相应的文件夹(但它不会在你的GitHub存储库中显示).

您也可以跳过Jekyll并创建一个contact带有index.html内部的子目录.无论哪种方式,您还需要确保您网站中任何指向资产(img,css,js)的链接都有前面的内容/.例如,

<link rel="stylesheet" href="css/style.css">
Run Code Online (Sandbox Code Playgroud)

应该是

<link rel="stylesheet" href="/css/style.css">
Run Code Online (Sandbox Code Playgroud)


kop*_*por 5

我正在使用北极狐主题,它使用以下链接字符串

<a class="page-link" href="{{ page.url | prepend: site.baseurl }}">{{ page.title }}</a>
Run Code Online (Sandbox Code Playgroud)

解决方案是添加remove: '.html'为过滤器,这导致

<a class="page-link" href="{{ page.url | remove: '.html' | prepend: site.baseurl }}">{{ page.title }}</a>
Run Code Online (Sandbox Code Playgroud)

Jekyll 的本地服务目前不起作用,但 Jekyll 3.0 承诺:https : //github.com/jekyll/jekyll/pull/3452


小智 5

现在,您需要做的只是添加permalink: /your-pretty-url

另一个答案不起作用。我试过了。您需要添加“/”前缀。

例如:

---
layout: post
title:  "Welcome to Jekyll!"
date:   2017-04-29 22:04:31 +0700
categories: jekyll update
permalink: /welcome
---
Run Code Online (Sandbox Code Playgroud)