Gerar .htaccess no intermediário

Escrever um arquivo .htaccess manualmente pode ser cansativo porque muitas diretivas do Apache devem ser duplicadas. Se você usa o Middleman para gerar sites estáticos, também pode usá-lo para .htaccess. Minha regra é que qualquer diretiva deve estar apenas uma vez em .htaccess . Defina os dados de origem no arquivo yml e faça um loop dos dados no modelo htaccess sem layout.

Mas há um problema. Middleman v3 anexa automaticamente a extensão do arquivo html . Portanto, adicione a extensão fictícia ao arquivo .htaccess e renomeie o arquivo após a criação. Eu não usaria html ou outra extensão conhecida porque minifiers ou outros plug-ins podem causar erros inesperados.

Exemplo

Depende totalmente de você quais diretivas você usará. Se você tiver .htaccess existente, simplesmente extraia as diretivas duplicadas. Abaixo você pode ver a configuração de um dos meus sites:

  • Redireciona example.com para www.example.com
  • Redireciona urls antigos para novos urls com código de status 301 Moved Permanently
  • Deflate + imagens de cache, arquivos CSS, JavaScript
  • Adicionar documentos de erro personalizados

config.rb

# disable layout
page
".htaccess.apache", :layout => false

# rename file after build
after_build
do
File.rename 'build/.htaccess.apache', 'build/.htaccess'
end

data / htaccess.yml

web:
domain
: example.com
url
: http://www.example.com

redirect
:
/old-url.html: /new-url.html
/another/url.html: /new/

cache
:
deflate
: \.(js|css|html|ico|png)$
expire
:
image
/png: access plus 1 month
image
/ico: access plus 1 month
image
/x-icon: access plus 1 month
text
/html: access plus 1 minute
text
/css: access plus 7 days
application
/javascript: access plus 7 days
text
/javascript: access plus 7 days

errors
:
401: "Unauthorized access"
404: /404.html

source / .htaccess.apache.erb

# MOVE PERMANENTLY
<% data.htaccess.redirect.each do |old, new| %>
Redirect 301 <%= old %> <%= data.htaccess.web.url %><%= new %>
<% end %>

# REWRITE - redirect to www. page
RewriteEngine on
RewriteCond %{HTTP_HOST} ^<%= data.htaccess.web.domain %>$
RewriteRule (.*) <%= data.htaccess.web.url %>/$1 [R=301,L]

# ERROR DOCUMENTS
<% data.htaccess.errors.each do |code, document| %>
ErrorDocument <%= code %> <%= document %>
<% end %>

# GZIP, CACHE
AddType image/x-icon .ico

ExpiresActive on
<% data.htaccess.cache.expire.each do |type, expire| %>
ExpiresByType <%= type %> "<%= expire %>"
<% end %>

<FilesMatch "<%= data.htaccess.cache.deflate %>">
SetOutputFilter DEFLATE
</FilesMatch>