1

我不是 Rubyist,但我更喜欢 Jekyll,我可以轻松地结合 Heroku 和 Git 创建一个“支持博客”的网站。

我想使用 Rack-Rewrite (或者如果有更好的方法可以这样做,我很乐意使用它)将 '/foo' 重写为 '/foo.html' (即,附加 .html但不更改浏览器),但前提是它不是现有文件或文件夹。

认为 rewrite %r{/(.*)}, '/$1.html'这是我前半部分所需要的(即,将 /foo 重写为 /foo.html),但我正在努力处理有条件的“如果文件不存在”部分。

如果它有帮助,在 IIS 下,我有以下相同的操作:

<rule name="RewriteHtml">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="{R:1}.html" />
</rule>
4

1 回答 1

4

如果你看一下Rack::Rewrite Github页面,有几种方法可以进行重写,这里只是猜测,但你可能最好选择任意重写而不是条件重写。

require "rack/jekyll"
require "rack/rewrite"

use Rack::Rewrite do
    rewrite %r{/(.+)}, lambda {     |match, rack_env| 
        if File.exists?('_site/' + match[1] + '.html')
            return '/' + match[1] + '.html' 
        else
            return '/' + match[1]
        end
    }
end

run Rack::Jekyll.new

祝你好运!

于 2011-08-19T00:00:14.737 回答