Caso 3: Adicionar parâmetros de consulta à URL
Digamos que existe um site chamado example.com que mostra um layout móvel por padrão, mas você prefere o layout de desktop. Felizmente, o site suporta um parâmetro de consulta layout para especificar qual layout o site exibe. Vamos criar uma regra que adicione layout=desktop automaticamente.
Talvez você pense que poderia defini-lo da seguinte forma:
- Redirecionar De:
https://example.com/.*(Expressão Regular) - Redirecionar Para:
$0?layout=desktop
$0 referencia a URL de destino. Se você tentar acessar example.com/hello, você será redirecionado para example.com/hello?layout=desktop. Este recurso é chamado de substituição.
A substituição também está disponível para o modo Curinga, pois é convertida internamente para Expressão Regular.
No entanto, existem alguns problemas com essas configurações.
Problema 1: Loop infinito
A configuração atual cria um loop de redirecionamento infinito, pois https://example.com/.* também direciona para https://example.com/hello?layout=desktop.
Neste caso, você pode especificar um padrão de URL excluído que permite o acesso sem redirecionamento, como este com Expressão Regular:
.*[&?]layout=[^&]*.*
.*: Corresponde a qualquer coisa[&?]: Corresponde a&ou?[^&]*: Corresponde a qualquer coisa, exceto&
Problema 2: Não consegue lidar com parâmetros existentes corretamente
Se a URL de destino já tiver outros parâmetros de consulta como example.com/hello?theme=dark, o destino será example.com/hello?theme=dark?layout=desktop (Existem dois ? na URL), mas você só pode unir os parâmetros com &. ? como um caractere especial só é permitido no início dos parâmetros. Portanto, não é tratado como um parâmetro válido.
Neste caso, altere as configurações assim:
- Redirecionar De:
(https://example.com/[^?]*)(\(.*))? - Redirecionar Para:
$1?layout=desktop&$3
Vamos analisar passo a passo.
(https://example.com/[^?]*): Corresponde à parte até o caractere anterior de?.[^?]*corresponde a qualquer coisa, exceto?.- Isso é envolvido com
()para que você possa referenciá-lo com$1mais tarde.
(\(.*))?: Corresponde a uma string que começa com?, o que significa parâmetros de consulta.- Isso também corresponde a uma string vazia pelo quantificador
?no final do padrão, que corresponde zero ou uma vez. - O
()externo e o()interno podem ser referenciados com$2e$3mais tarde.
- Isso também corresponde a uma string vazia pelo quantificador
RegExr pode ajudá-lo a entender os detalhes.
O RegExr mostra um erro quando você não escapa / com \. Embora você possa escapá-lo, não é necessário, pois o Redirect Web usa um mecanismo diferente da Apple que não exige escape.
Esta não é uma solução perfeita, pois redireciona example.com/hello para example.com/hello?layout=desktop&, que inclui um & desnecessário no final da URL. Não é um grande problema em geral, mas se você deseja removê-lo, pode usar o Processamento de Grupo de Captura.
Em conclusão, esta é a saída final:
- Redirecionar De:
(https://example.com/[^?]*)((\(.*))?)(Expressão Regular) - Redirecionar Para:
$1?layout=desktop$3 - Padrão de URL Excluído:
.*[&?]layout=[^&]*.*(Expressão Regular) - Processamento de Grupo de Captura:
- Grupo:
$3 - Processo: Substituir Ocorrências
- Alvo:
\?(.*) - Substituição:
&$1
- Alvo:
- Grupo:
Este é apenas um exemplo. Você também pode criar várias regras para lidar com cada problema. Pode ser muito mais simples.