我正在使用GitHub页面来托管我的最新网站(http://jasonhoffmann.github.io/)。我想知道是否有办法从子页面(http://jasonhoffmann.github.io/contact.html)的末尾删除.html扩展名,因为无法访问服务器。
答案 0 :(得分:79)
我不确定您是否已经知道这一点,但是要从GitHub页面删除.html扩展名,您只需从链接中删除.html扩展名。
换句话说,它已经有效,你不需要做任何事情。您不必使用子目录,CNAME,重定向,Jekyll _config.yml,YAML前端问题或此处所有答案中建议的任何其他黑客。
例如,您可以使用:
而不是:
并显示相同的文件。 只需更改链接中的链接就可以了。
我进行了一些测试,以演示它如何真正起作用,您可以点击链接,它会突出显示哪个文件加载了哪个URL,包括在某些情况下有关不安全重定向的警告。
对于eaxample,链接:
显示它由URL中的test1
显示,但实际显示文件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页面上不是一个好主意 - 尤其是项目页面 - 因为在重新命名的分叉和项目之后,您必须记住更新所有html中的所有链接和js / css资产文件)。
另一件事是,现在每个导航都有一个无用的重定向 - 顺便将从HTTPS重定向到HTTP (来自安全网址,而没有斜线到带有斜杠的不安全的网址,例如见:
(在撰写本文时)重定向到:
和不到:
正如您所料,所以请确保您知道这一点。看到: (请注意,此图片链接到安全的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/
... ^^^^
希望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/
... ^^^^^
唯一的区别是它是一个项目根URL而不是项目中的更深层目录(参见the project structure)所以错误重定向似乎只出现在项目的GitHub页面内的深层链接中浏览器我只在您使用隐身模式时进行了测试。
底线是你需要小心。我的建议是完全避免所有重定向,并且只使用那些根本不会导致重定向的网址。
答案 1 :(得分:13)
我认为你必须使用子目录(但可能有一种更简单的方法):
/index.html => http://jasonhoffmann.github.io
/contact/index.html => http://jasonhoffmann.github.io/contact
但是,您可以使用CNAME更多地控制GitHub页面重定向到您自己的domain。对不起,我没有给你一个明确的答案,但希望这可以让你开始。
答案 2 :(得分:6)
您可以通过Jekyll执行此操作,这是GitHub Pages中内置的静态站点生成器。它有一些permalink settings,可以在_config.yml
中设置(这会影响您网站上的所有页面和帖子),也可以设置在每个页面/帖子的YAML front-matter中。
例如,您可以将以下代码添加到contact.html
文件中:
---
permalink: contact/
---
这将在<!DOCTYPE html>
之前插入,但是Jekyll会在GitHub页面上提供它时将其删除。执行此操作后,您将能够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">
答案 3 :(得分:4)
目前,您只需添加permalink: /your-pretty-url
另一个答案不起作用。我试过了。您需要添加'/'前缀。
例如:
---
layout: post
title: "Welcome to Jekyll!"
date: 2017-04-29 22:04:31 +0700
categories: jekyll update
permalink: /welcome
---
答案 4 :(得分:3)
我正在使用arctic fox theme,uses following link strings:
public class TestShoutBox5 {
/**
* @param args
* the command line arguments
*
*/
public static void main(String[] args) {
// TODO code application logic here
String Subjects[] = new String[] { "My Teacher", "I", "You" };
Random random = new Random(); // One Random
int S = random.nextInt(3);
String Objects[] = new String[] { "Homework", "Work", "Quiz" };
int O = random.nextInt(3);
String Verbs[] = new String[] { "Studying", "Playing", "Working" };
int R = random.nextInt(3);
String Adjectives[] = new String[] { "Smart", "Tall", "Hard" };
int A = random.nextInt(3);
String Adverbs[] = new String[] { "quickly", "everywhere", "fast" };
int Ad = random.nextInt(3);
System.out.print("Your Sentence" + " " + Subjects[S] + " " + Objects[O] + " " + Verbs[R] + " " + Adjectives[A]
+ " " + Adverbs[Ad]);
}
}
解决方案是添加<a class="page-link" href="{{ page.url | prepend: site.baseurl }}">{{ page.title }}</a>
作为过滤器,结果为
remove: '.html'
Local serving with Jekyll目前不起作用,但承诺给Jekyll 3.0:https://github.com/jekyll/jekyll/pull/3452
答案 5 :(得分:3)
通过将永久链接更改为
,删除了.html扩展名 private static BiConsumer<Parent, String> consumer2 = Parent::doSomething;
别忘了最后一个/
答案 6 :(得分:2)
由于用户rsp已经提到GitHub Pages已经实现了非常永久链接,并且没有必要做任何事情,因此默认情况下在本地或Jekyll中运行Jekyll服务器时不会这样做。如果你想在自己的非Github Pages网站(仍然使用Jekyll)中使用Jekyll从页面中删除html扩展名,或者在推送到GitHub之前尽可能多地拥有一个类似于Github Pages的本地开发站点,
您只需将其添加到 _config.yml
文件:
permalink: pretty
通过使所有帖子都有自己的文件夹和名为index.html的帖子,从链接中删除.html。
答案 7 :(得分:-1)
你不需要做所有之前的回复,你可以做一件简单的事情,就是在你的情况下 make a folder that has your html file name...
它将是 /contacts
然后将你的 contacts.html 重命名为 index .html 然后将其移动到您创建的 /contacts 文件夹中!
输出:
http://mysite.github.io/contact
享受!
instagram:@ramyhadid
<块引用>编辑:我知道来不及回答:)