Как использовать Rack-Rewrite для удаления .html (если файл существует)? - PullRequest
1 голос
/ 18 августа 2011

Я не 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>

1 Ответ

4 голосов
/ 19 августа 2011

Если вы заглянете на страницу 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

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...