中间人删除 .html 扩展名,但保持 http://example.com/about.html 有效

Middleman remove .html extension, but keep http://example.com/about.html valid

我在 config.rb 文件中添加了以下行以删除 .html 扩展名,因此 http://example.com/about.html 变为 http://example.com/about 并查看 build 文件夹 我可以看到它的作用是为每个文件创建一个单独的目录,因此 about/index.html 用于 about.html 页面。这意味着如果使用 http://example.com/about.html 访问网站,将找不到这样的页面,我希望发生的是重定向到 http://example.com/about 或至少提供相关页面并保持 url 未清理.

我相信获得所需内容的唯一方法是通过网络服务器解决此问题。一个选项:

config.rb

require 'rack/middleman/optional_html'
  use Rack::OptionalHtml,
    root: '/example_domain/source',
    urls: %w[/]

Gemfile

gem 'optional_html', :git => 'https://github.com/tommysundstrom/middleman-rack-optional-html.git'

_nav.html.erb

<nav>
  <a href="/about">About</a>
</nav>

example.com.conf(将此添加到您的 nginx 服务器块)

location / { try_files $uri.html $uri/index.html /fallback.html; }
location = /fallback.html { }

layout.erb(如果您想使用规范网址)

<!DOCTYPE html>
<html lang="en">
<head>
<title><%= current_page.data.title %></title>
<link rel="canonical" href="https://www.example.com/<%= current_page.path.chomp('index.html').chomp('.html').chomp('/') %>"/>
</head>