Pergunta

Estou tentando resolver um problema que aparentemente está fora do meu controle, mas espero que possa ser corrigido com um pouco de magia .htaccess.

Antecedentes do problema

Eu tenho uma implementação do MediaWiki que atualmente usa um arquivo .htaccess para embelezar a URL.Na configuração padrão do MediaWiki sem o mod_rewrite, cada artigo no wiki é normalmente acessado visitando:

www.mywebsite.org/index.php?title=George_Clooney_(ator)

Com o .htaccess (código abaixo), conseguimos limpar isso para que a mesma página possa ser acessada em:

www.mywebsite.org/George_Clooney_(ator)

Tudo isso está funcionando como deveria.Internamente, não há problema aqui.

Resumo do problema

O problema é que uma parte significativa do tráfego do meu wiki vem do vBulletin, que descobri ter um bug na forma como analisa automaticamente URLs nas postagens dos membros.Quando adicionam o link acima, o vBulletin analisa o URL em um link do BB Code, mas deixa de fora o parêntese final.Na verdade, o código BB final geralmente se parece com isto:

[url]http://www.mywebsite.org/George_Clooney_(actor[/url])

O que é lamentável, porque os membros geralmente não percebem, e então o link os envia para uma página que não existe em:

www.mywebsite.org/George_Clooney_(ator

Minha pergunta

É possível, esperançosamente, através de uma regra de reescrita, adicionar o parêntese de fechamento se for detectado um parêntese de abertura não fechado?

Para ajudar, nosso wiki segue um formato de nomenclatura bastante rígido, e não prevejo nenhuma situação em que teríamos um artigo com parênteses de abertura sem parênteses de fechamento.Em todos os casos, as palavras entre parênteses estão localizadas no final do nome do artigo.Nossa convenção de nomenclatura de artigos é sempre:

Artigo_Nome ou Artigo_Nome_(tipo)

Portanto, se recebermos um link incorreto que tenta visitar "www.mywebsite.org/George_Clooney_(actor", gostaria de redirecioná-lo automaticamente para "www.mywebsite.org/George_Clooney_(actor)".

Outras rotas possíveis que considerei são a codificação de uma seção de sugestões de artigos da página 404.Acho que isso dará um pouco mais de trabalho, mas será minha solução preferida se esse plano de htaccess não funcionar.

Aqui está o que tenho atualmente para meu arquivo .htaccess:

RewriteEngine On
Options +FollowSymLinks

# Require Subdomain
RewriteCond %{HTTP_HOST} ^mywebsite.org [NC]
RewriteRule ^(.*)$ http://www.mywebsite.org/$1 [L,R=301]

# Pretty URL
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/index.php [PT,L,QSA]

Qualquer ajuda seria muito apreciada.htaccess, e a combinação do regex correto, ainda é muito novo e mágico para mim.

Foi útil?

Solução

Você pode usar esta regra como seu primeira regra (logo abaixo RewriteEngine On linha):

RewriteRule ^(.*?\(.*?[^)])$ /$1) [R=301,L,NE]

Isso pressupõe que haja apenas um parêntese faltando no URL.

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