# Redirecionamento infinito em URLs de tags persas codificadas em porcentagem com \`slug\_generation\_method = encoded\`

**URL:** <https://meta.discourse.org/t/infinite-redirect-on-percent-encoded-persian-tag-urls-with-slug-generation-method-encoded/415865>\
**Category:** Bug\
**Tags:** tags, rtl\
**Created:** [Outubro 27, 2026, 12:22pm UTC](https://meta.discourse.org/t/infinite-redirect-on-percent-encoded-persian-tag-urls-with-slug-generation-method-encoded/415865 "2026-10-27T12:22:10Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![serkhelesheyi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/serkhelesheyi/32/497726_2.png) [@serkhelesheyi](https://meta.discourse.org/u/serkhelesheyi)\
**Post date:** [Outubro 27, 2026, 12:22pm UTC](https://meta.discourse.org/t/infinite-redirect-on-percent-encoded-persian-tag-urls-with-slug-generation-method-encoded/415865/1 "2026-10-27T12:22:10Z")

</div>

## Resumo

Páginas de tags com slugs persas percent-encoded podem entrar em um loop infinito de redirecionamentos HTTP quando o Discourse é configurado com `slug_generation_method = encoded`.

O slug armazenado da tag e a URL gerada parecem consistentes, mas ao solicitar a URL canônica, ocorre um redirecionamento `301 Moved Permanently` para exatamente a mesma URL.

## Ambiente

- Discourse: instalação self-hosted

- Método de geração de slug: `encoded`

- Idioma: Persa (Farsi), utilizando caracteres não-ASCII

- Rota afetada: `/tag/:tag_slug/:tag_id`

## Passos para Reproduzir

1. Configure o Discourse para usar `slug_generation_method = encoded`.

2. Crie ou identifique uma tag com um nome persa, por exemplo `نمونه`.

3. Abra a URL canônica da tag, usando seu slug e ID reais. Por exemplo:

4. Inspecione a resposta HTTP.

## Comportamento Real

A solicitação retorna `301 Moved Permanently`, com o cabeçalho `Location` apontando para exatamente a mesma URL. Seguir o redirecionamento repetidamente produz um loop infinito de redirecionamentos, e a página da tag não pode ser aberta diretamente.

No ambiente observado, as seguintes comparações foram feitas:

- A URL percent-encoded canônica da tag persa retornou `301` para si mesma.

- A URL correspondente com dupla percent-encoding retornou `200`.

- Uma tag com slug latino retornou `200` usando sua URL canônica.

## Comportamento Esperado

A URL canônica para uma tag persa deve retornar a página da tag com sucesso, sem redirecionar para si mesma.

Se o slug solicitado não for canônico, o Discourse deve redirecionar para a URL canônica correta uma única vez, em vez de redirecionar repetidamente para a mesma URL.

## Código Relevante

Em `TagsController#should_redirect_tag?`, a rota baseada em ID compara o slug solicitado diretamente com o slug da URL armazenado:

```plaintext
params[:tag_slug] != tag.slug_for_url

```

Por comparação, `TopicsController#slugs_do_not_match` lida explicitamente com o método de geração de slug `encoded`:

```plaintext
if SiteSetting.slug_generation_method != "encoded"
  params[:slug] && @topic_view.topic.slug != params[:slug]
else
  params[:slug] && CGI.unescape(@topic_view.topic.slug) != params[:slug]
end

```

Essa diferença sugere que a comparação de slugs de tags pode não considerar corretamente os slugs não-ASCII percent-encoded quando `slug_generation_method = encoded`.

## Causa Provável

O controlador de tags pode estar comparando o parâmetro de rota decodificado com o slug armazenado percent-encoded, fazendo com que a comparação falhe mesmo quando a solicitação usa a URL canônica. O redirecionamento resultante então aponta de volta para a mesma URL.

Esta é uma hipótese baseada no comportamento HTTP observado e na comparação do código.

## Correção Sugerida

Seria possível que a comparação de slugs de tags lidasse com `slug_generation_method = encoded` de forma consistente com a comparação de slugs de tópicos?

Por favor, considere também adicionar especificações de requisição que cubram:

- URLs canônicas para tags com nomes persas ou outros não-ASCII.

- Renderização bem-sucedida de URLs canônicas percent-encoded de tags.

- Redirecionamentos corretos para slugs genuinamente não-canônicos.

- Prevenção de redirecionamentos para exatamente a mesma URL.

## Impacto

Os usuários podem ser incapazes de abrir diretamente ou em uma nova aba do navegador as páginas de tags persas afetadas. O problema também pode afetar links para essas páginas vindos de outras partes do fórum.

Agradeceria a confirmação de se este comportamento é reproduzível e se uma correção ou teste de regressão seria apropriado.
