Pergunta

Eu gostaria de usar aliasmatch para criar um pseudônimo para tudo em uma pasta, exceto Para dois (ou mais) padrões REGEX específicos.

Por exemplo, o Aliasmatch a seguir cria um alias para tudo na pasta 'Conteúdo':

AliasMatch /content(.*) /home/username/public_html/$1

Mas existem dois padrões regex que eu não quero que o alias acima corresponda, por exemplo:

^content/([a-zA-Z0-9_-]+)/id-([a-zA-Z0-9_-]+)/([0-9]+)
^content/([a-zA-Z0-9_-]+)/nn-([a-zA-Z0-9_-]+)

Eu sei que o caractere não (!) Pode ser usado para negar um padrão, mas não sei como usá -lo aqui ou como negar vários padrões em aliasmatch.

Como isso poderia ser feito?

Foi útil?

Solução

O que você está falando é chamado Lookahead negativo, e você apenas envolve o regex para o que não quer combinar, assim: (?!foo). A combinação de regexes pode ser tão simples quanto amarrá -los com um tubo entre eles, mas você pode fazer um pouco melhor do que isso neste caso. Isso reutiliza a primeira parte dos dois regexes, o que é idêntico:

[a-zA-Z0-9_-]+/(?:id-[a-zA-Z0-9_-]+/[0-9]+|nn-[a-zA-Z0-9_-]+)

Porque o tubo (ou '|', o operador de alternância) tem menor precedência do que qualquer outra coisa, a alternância deve ser contida em um grupo. Observe que eu usei um Grupo não capturado - ou seja, (?:...) - e se livrou dos parênteses em seus regexes. Caso contrário, eles teriam jogado fora da numeração de um grupo que você Faz quero capturar, e você teria que usar algo diferente $1 na segunda parte da regra. Aqui está todo o regex:

^/content(?![a-zA-Z0-9_-]+/(?:id-[a-zA-Z0-9_-]+/[0-9]+|nn-[a-zA-Z0-9_-]+))(.*)

EDIT: Aparentemente, o sabor Regex usado pelo Aliasmatch não suporta LookaHeads, mas tem sua própria sintaxe de negação: !(^/foo). Seu objetivo parece ser negar todo o regex, o que significa que não o ajudaria, mas talvez você não precise. Talvez você possa apenas alias, esses diretórios para si mesmos. Então você não teria que negar nada.

AliasMatch ^(/content/[a-zA-Z0-9_-]+/id-[a-zA-Z0-9_-]+/[0-9]+.*) $1
AliasMatch ^(/content/[a-zA-Z0-9_-]+/nn-[a-zA-Z0-9_-]+.*) $1
AliasMatch ^/content/(.*) /home/username/public_html/$1

Ou talvez você possa fazer algo com um <DirectoryMatch> Diretiva, ou mudando para mod_rewrite. Mas (obviamente) não sou um especialista em Apache-minha especialidade é regexes, e não acho que um regex resolva seu problema.

Outras dicas

Modalias de fato suporta lookaheads negativos. Estou usando isso no meu site, o que funciona muito bem:

AliasMatch ^/(?!w/|BingSiteAuth\.xml$|favicon\.ico$|google.{16}\.html$|robots\.txt$) /path/to/file

Certifique -se de começar seu regex com um "/", pois é sempre o primeiro personagem com mod_alias! Nunca tente iniciar sua regra com uma aparência, ou então a análise falhará.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top