Estou tentando simular a estrutura de permalink de uma versão anterior do meu site usando as regras Redirect e RedirectMatch no meu arquivo .htaccess.
Eu tenho regras diferentes que gostaria de aplicar a diferentes caminhos do meu site antigo. Alguns diretórios não têm análogo e eu quero que eles redirecionem para um único local. Alguns diretórios contêm muitos itens (milhares) em locais diferentes e eu quero que eles redirecionem de maneira inteligente para os novos locais corretos no novo site.
Parece que eu poderia proteger e agrupar itens relacionados com um teste básico de regex em < Se > para impedir que todos os redirecionamentos agrupados contidos sejam testados se nunca correspondam. Nesse método, a configuração resultante parece lógica e coerente e pode ser gerada automaticamente:
<If "%{REQUEST_URI} =~ m#^/categories/software/.*#">
# These rules aren't considered if the request wasn't for a subpath of categories/software.
<If "%{REQUEST_URI} =~ m#^/categories/software/store/.*#">
# All old store pages now invalid, go to main store.
RedirectMatch 301 .* /software-store/
</If>
# Regexes for each category of software to group them logically.
# And so that 1,000s of redirects don't get considered on each page load.
<If "%{REQUEST_URI} =~ m#^/categories/software/item/.*#">
# Loads and loads of redirect lines for pages with arbitrary rules to product pages.
Redirect 301 "/categories/software/item/foo" /software-store/games/foo
Redirect 301 "/categories/software/item/bar" /software-store/productivity/bar
Redirect 301 "/categories/software/item/baz" /software-store/misc/baz
# ...
</If>
<If "%{REQUEST_URI} =~ m#^/categories/software/dlc/.*#">
# Loads and loads of redirect lines. It could also be grouped into subdirectories of dlc/ and so on.
# ...
</If>
</If>
# ...
Para um catálogo enorme, alguns regexes de proteção podem impedir milhares de testes inúteis.
Estou usando o Apache 2.4, em que o < If > diretiva está disponível, mas as diretivas acima não estão tendo o efeito esperado. O interior < s > s está sendo ignorado completamente.
Se eu remover a tag < If > e só tem o mais íntimo < se > s presente as regras funcionam, então eu não acredito que minha sintaxe ou minhas regras de redirecionamento estão em falta.
Suspeito que o problema é que não posso aninhar < Se > s, embora isso pareça ser uma coisa muito comum que você queira fazer. Não consigo ver qualquer referência ao aninhamento, permitido ou não, na documentação.
link
Posso aninhar < se > diretivas? E se sim / se não for assim, você pode me apontar para a seção da documentação que diz o porquê.