Skip to content

Redirecionar automaticamente para site clássico em erros 404 com URLs específicas por tipo de recurso (incluindo PDFs)#390

Draft
Copilot wants to merge 10 commits intomasterfrom
copilot/redirect-to-old-site-if-not-found
Draft

Redirecionar automaticamente para site clássico em erros 404 com URLs específicas por tipo de recurso (incluindo PDFs)#390
Copilot wants to merge 10 commits intomasterfrom
copilot/redirect-to-old-site-if-not-found

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Feb 10, 2026

O que esse PR faz?

Implementa redirecionamento automático para o site clássico quando recursos não são encontrados (404), evitando perda de acesso ao conteúdo durante a migração.

Quando PREVIOUS_WEBSITE_URI está configurado:

  • Requisições HTML → HTTP 302 para URL específica do site clássico usando formato scielo.php com PIDs/ISSNs apropriados
  • Para recursos conhecidos (journal, issue, article, PDF), constrói URLs completas do site clássico
  • Para outros recursos, redireciona para o mesmo caminho no site clássico
  • Requisições JSON → Retorna 404 normalmente (sem redirect)

Quando não configurado: comportamento 404 padrão sem alterações.

Construção de URLs por tipo de recurso:

  • Journal (/j/<url_seg>/): Extrai ISSN do periódico → scielo.php?script=sci_serial&pid={ISSN}&lng={lang}&nrm=iso
  • Issue (/j/<url_seg>/i/<url_seg_issue>/): Extrai PID do fascículo → scielo.php?script=sci_issuetoc&pid={PID}&lng={lang}&nrm=iso
  • Article (/j/<url_seg>/a/<article_pid_v3>/): Extrai PID do artigo → scielo.php?script=sci_arttext&pid={PID}&lng={lang}&nrm=iso
  • PDF (/pdf/<journal_acron>/<issue_info>/<filename>.pdf): Extrai PID do artigo → scielo.php?script=sci_pdf&pid={PID}&lng={lang}&nrm=iso

Onde a revisão poderia começar?

opac/webapp/main/errors.py - função page_not_found() (linhas 35-59) e _build_classic_url_for_resource() (linhas 62-128)

opac/webapp/main/helper.py - função build_classic_website_uri() (linhas 75-133)

Como este poderia ser testado manualmente?

  1. Configure export PREVIOUS_WEBSITE_URI="https://old.scielo.br"
  2. Inicie a aplicação
  3. Teste journal não encontrado:
    • Acesse http://localhost:5000/j/invalid-journal/
    • Se o journal existir no BD, verifica redirect para https://old.scielo.br/scielo.php?script=sci_serial&pid={ISSN}&lng=pt&nrm=iso
    • Se não existir, verifica redirect para https://old.scielo.br/j/invalid-journal/
  4. Teste issue não encontrado:
    • Acesse http://localhost:5000/j/valid-journal/i/invalid-issue/
    • Verifica redirect com formato scielo.php apropriado
  5. Teste article não encontrado:
    • Acesse http://localhost:5000/j/valid-journal/a/invalid-article/
    • Verifica redirect com formato scielo.php apropriado
  6. Teste PDF não encontrado:
    • Acesse http://localhost:5000/pdf/journal/issue/article.pdf
    • Verifica redirect para https://old.scielo.br/scielo.php?script=sci_pdf&pid={PID}&lng=pt&nrm=iso
  7. Teste requisição JSON: curl -H "Accept: application/json" http://localhost:5000/j/nao-existe/
  8. Verifique resposta 404 sem redirect

Para testar sem redirect, não configure PREVIOUS_WEBSITE_URI e verifique página 404 padrão.

Algum cenário de contexto que queira dar?

Durante a transição do site clássico (Web) para o novo (opac_5), nem todo conteúdo foi migrado. Sem este PR, usuários encontram 404 em conteúdo que ainda existe no site clássico.

A variável PREVIOUS_WEBSITE_URI já existe e é usada para exibir link do site anterior na navegação. Este PR reutiliza a mesma configuração para implementar redirecionamento automático.

Decisões técnicas:

  • HTTP 302 (temporary) ao invés de 301: indica redirecionamento temporário durante migração
  • Apenas requisições HTML: APIs mantêm comportamento 404 correto
  • Preservação de query params: mantém funcionalidade completa no site clássico
  • URLs específicas por tipo de recurso: o site clássico usa formato scielo.php?script=...&pid=... diferente das URLs do OPAC
  • Pattern matching via regex: detecta tipo de recurso pela estrutura da URL
  • Busca no banco de dados: obtém PIDs/ISSNs corretos para construir URLs válidas do site clássico
  • Para PDFs: busca artigo por nome do arquivo PDF ou material suplementar, consistente com router_legacy_pdf existente
  • Fallback inteligente: se não conseguir construir URL específica, usa redirect simples de path
  • Tratamento de erros específico: captura AttributeError, TypeError, ImportError com logging debug
  • Preservação de idioma: obtém idioma da sessão/locale e converte para formato do site clássico (pt_BR → pt)

Referências

  • Configuração existente: opac/webapp/config/default.py linha 643
  • Uso atual de PREVIOUS_WEBSITE_URI: opac/webapp/templates/collection/includes/nav.html
  • Formato de URLs do site clássico: opac/tests/fixtures/legacy_urls.txt
  • Função de roteamento legacy existente: opac/webapp/main/views.py função router_legacy() (linha 353)
  • Função de roteamento legacy PDF: opac/webapp/main/views.py função router_legacy_pdf() (linha 1486)
Original prompt

This section details on the original issue you should resolve

<issue_title>Redirecionar para o site anterior se o recurso não se encontra no site novo</issue_title>
<issue_description>### Descrição da tarefa

Como estamos fazendo uma transição do site clássico (https://github.com/scieloorg/Web) site novo (https://github.com/scieloorg/opac_5), pode ser que nem todo o conteúdo foi migrado com sucesso. Então, para evitar que o usuário deixe de ter acesso ao conteúdo, redirecionar para o site anterior se o recurso não se encontra no site novo.

Subtarefas

  • Verificar se existe uma variável que indica o domínio para o site clássico. Caso não exista, criar uma variável
  • Se um recurso não for encontrado, no lugar de retornar 404, tentar levar o usuário para a mesma rota mas no site clássico
  • Se ainda assim falhar, apresente uma mensagem de que o site está em migração e indique a URL da home do site anterior.</issue_description>

Comments on the Issue (you are @copilot in this section)


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI and others added 5 commits February 10, 2026 13:27
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
…behavior

Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copilot AI changed the title [WIP] Redirect to previous site if resource is missing Redirecionar automaticamente para site clássico em erros 404 Feb 10, 2026
response = jsonify({"error": e})
response.status_code = 404
return response

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot muito bem! mas será necessário fazer certo tratamento dentro de opac/webapp/main/views.py para obter a URI completa de cada recurso, ou pelo menos, de journal, issue_toc, article_detail. Consegue?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementado! ✅

Agora o sistema constrói URLs completas e específicas para o site clássico para cada tipo de recurso:

Journal (/j/abc/) → {PREVIOUS_WEBSITE_URI}/scielo.php?script=sci_serial&pid={ISSN}&lng={lang}&nrm=iso

Issue (/j/abc/i/v1n1/) → {PREVIOUS_WEBSITE_URI}/scielo.php?script=sci_issuetoc&pid={PID}&lng={lang}&nrm=iso

Article (/j/abc/a/xyz/) → {PREVIOUS_WEBSITE_URI}/scielo.php?script=sci_arttext&pid={PID}&lng={lang}&nrm=iso

O código:

  1. Detecta automaticamente o tipo de recurso baseado no padrão da URL
  2. Busca o objeto no banco (journal/issue/article)
  3. Extrai o PID/ISSN apropriado
  4. Constrói a URL do site clássico com os parâmetros corretos
  5. Se não conseguir construir a URL específica, usa o fallback (redirect simples do path)

Commit: e0870ea

Copilot AI and others added 2 commits February 10, 2026 16:08
…cle resources

Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
…lder

Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copilot AI changed the title Redirecionar automaticamente para site clássico em erros 404 Redirecionar automaticamente para site clássico em erros 404 com URLs específicas por tipo de recurso Feb 10, 2026
@robertatakenaka
Copy link
Copy Markdown
Member

@copilot muito bem! Mas faltou tratar pdf, poderia continuar?

Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Feb 10, 2026

@copilot muito bem! Mas faltou tratar pdf, poderia continuar?

Implementado! ✅

Agora o sistema também trata PDFs:

PDF (/pdf/abc/v1n1/file.pdf) → {PREVIOUS_WEBSITE_URI}/scielo.php?script=sci_pdf&pid={PID}&lng={lang}&nrm=iso

O código:

  1. Detecta URLs de PDF pelo padrão /pdf/<journal_acron>/<issue_info>/<pdf_filename>.pdf
  2. Busca o artigo no banco pelo nome do arquivo PDF
  3. Se não encontrar, tenta buscar como material suplementar
  4. Extrai o PID do artigo
  5. Constrói a URL do site clássico com script=sci_pdf

Commit: d0a45fc

Copilot AI changed the title Redirecionar automaticamente para site clássico em erros 404 com URLs específicas por tipo de recurso Redirecionar automaticamente para site clássico em erros 404 com URLs específicas por tipo de recurso (incluindo PDFs) Feb 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Redirecionar para o site anterior se o recurso não se encontra no site novo

3 participants