Pode -se usar o nome nomeado no apache mod_rewrite
-
26-09-2019 - |
Pergunta
Tudo,
Encontrei uma pequena peculiaridade interessante em um dos meus reescritores, que eu queria resolver pelo uso de referências nomeadas. No entanto, pelo que posso ver, isso não é possível no Mod_rewrite do Apache.
Eu tenho dois URLs recebidos, cada um contendo uma variável -chave, que precisa ser reescrita para a mesma ação da estrutura subjacente.
URLs de entrada:
/users/list/page-2
/users/list/2
Reescreva -se desejado
/? Módulo = usuários e ação = Lista e pagenum = 2
Eu gostaria de fazer algo assim
Rewriturele ^/(? Pu003Cmodule> ([ w]+))/(? Pu003Caction> ([ w]+))/(página-)? (? Pu003Cpagenum> ([ d]+)) $ /? Module = $ {Module} & Action = $ {Action} & pagenum = $ {pagenum} [L, qsa
No entanto, o Apache simplesmente não quer jogar assim e me dá valores nulos nos locais das referências de back -referências nomeadas. Para me dar ao redor do problema, usei referências numéricas aos grupos capturados (US $ 1, US $ 2, US $ 4) (mas estou quase no meio do limite de n = 9 apache). Portanto, isso não é uma parada para mim.
Eu gostaria de saber, se as backreferências nomeadas estiverem disponíveis no Mod_rewrite do Apache e, se forem, por que o padrão do meu reescritorulou não corresponde?
Obrigado, Ian
Solução
Isso pode ser útil:
Outras dicas
Se a mais recente resposta do @SuperSpace não funcionar, o que eu sugeriria é rotear todos os links que não devem direcionar arquivos/diretórios e direcioná -los para uma página de índice. Em seguida, configure uma classe de roteamento que aborda o nome da página e faz correspondência manual, para que você possa fazer com que sua matriz de captura regex nomeada e listar os modelos ou páginas que deseja alimentar.
Se você tiver que seguir por esse caminho, me avise e posso oferecer algum código das minhas aulas.
Parece que não há backreferências, depois de olhar para a fonte Mod_rewrite.
De qualquer forma, eu recomendo o uso da opção Rewritemap, em vez de uma longa lista de reescritores, pois será muito mais rápido do que itera através de uma longa lista.