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>