2014-01-20 129 views

回答

4

我會假設你將不得不使用子目錄(但有可能是一個更簡單的方法):

/index.html   => http://jasonhoffmann.github.io 
/contact/index.html => http://jasonhoffmann.github.io/contact 

但是,您可以使用CNAME到GitHub的頁面重定向到自己domain有更多的控制。對不起,我沒有給你一個明確的答案,但希望這可以讓你開始。

5

您可以通過Jekyll,一個內置於GitHub頁面的靜態網站生成器來完成此操作。它有一些permalink settings,可以在_config.yml(這將影響您網站上的所有頁面和帖子)或YAML front-matter中爲每個Page/Post設置。

例如,你可以在下面的代碼添加到您的contact.html文件:

--- 
permalink: contact/ 
--- 

<!DOCTYPE html>之前插入,但傑奇會照顧在投放時在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 

如果沒有本地安裝化身,你會看到這一切,減去_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"> 
49

它已經工作,你不必做任何事情

我不知道你是否已經意識到這一點或不但要從GitHub頁面中移除.html擴展名,您只需從鏈接中移除.html擴展名即可。

換句話說,它已經工作,你不必做任何事情。您不必在此處使用子目錄,CNAME,重定向,Jekyll _config.yml,YAML前臺或任何其他hack提示。

例子

例如,你可以使用:代替

它顯示相同的文件。 只需更改鏈接中的鏈接即可。

測試

我做了一些測試,證明它到底是如何工作的,您可以點擊鏈接,它突出了文件加載與網址,其中包括有關在某些情況下不安全重定向警告。

對於eaxample,鏈接:

表明,它是通過在URL中的test1顯示,但實際顯示文件test1.htmlenter image description here

問題與其他解決方案

在特殊子目錄中使用像這樣在其他答案建議這樣的東西不會做你想要的東西,當詢問example.com/name只是服務example.com/name.html,而是會給你一個301重定向到example.com/name/(注意尾隨斜槓),這反過來會給你的內容example.com/name/index.html文件。

這導致以下問題:你是在不同的目錄,你需要使用<a href="../name">而不是爲鏈接到其他網頁在同一水平上只是<a href="name">和同樣適用於所有的資產(或者你可以使用絕對路徑因爲有人建議這不是GitHub頁面上的好主意 - 尤其是項目頁面 - 因爲在重命名叉子和項目後,你必須記得更新所有html文件中的所有鏈接和js/css資源)。

的另一件事是,現在你必須爲每一個導航無用重定向 - 這亦重定向從HTTPS到HTTP(從安全網址沒有斜槓不安全的URL以斜槓),例如見:

其中(在寫入時)重定向到:

到:

如你所期望的,所以請確保您知道這一點。請參閱: Insecure redirect (注意,這個圖片鏈接到一個安全的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日(我不知道它始終是因爲我最近發現它在更新這個答案)這個網址的情況下:

重定向到:

,因爲它應該。見標題:

$ 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/ 
...  ^^^^^ 

唯一的區別是,它是一個項目的根網址,而不是項目中更深的目錄(見the project structure),所以馬車重定向似乎只存在於一個項目的GitHub的內部深層鏈接我只在使用隱身模式時纔會測試網頁和一個瀏覽器。

的底線是,你需要小心。我的建議是完全避免所有重定向,並只使用那些根本不會導致任何重定向的網址。

1

正如用戶rsp所提到的,漂亮的固定鏈接已經被GitHub Pages實現了,並且不需要做任何事情,在本地運行Jekyll服務器或默認運行在Jekyll時,這不會完成。如果你想在你自己的非Github Pages站點(仍然與Jekyll一起提供)中使用Jekyll去除html擴展,或者在推送到GitHub之前儘可能地有一個類似於Github Pages的本地開發站點,

你只需要它添加到_config.yml文件

permalink: pretty

這使所有的帖子都有自己的文件夾並命名爲index.html中的文章鏈接刪除的.html。

+0

不與[北極狐主題]工作(https://github.com/diezcami/arctic-fox-theme)。 必須使用'page.url |刪除:'.html'。 本地服務將與Jekyll 3.0起:https://github.com/jekyll/jekyll/pull/3452 – koppor

+1

您是否在GH頁面上託管它,並使用他們的jekyll版本? – matrixanomaly

3

現在,您只需添加permalink: /your-pretty-url

其他答案不起作用。我試過了。你需要添加'/'前綴。

例如:

--- 
layout: post 
title: "Welcome to Jekyll!" 
date: 2017-04-29 22:04:31 +0700 
categories: jekyll update 
permalink: /welcome 
--- 
+0

你懂了! '''permalink:pretty'''是去https://jekyllrb.com/docs/permalinks/ – 0bserver07