Domanda

Sto cercando di affrontare un problema che apparentemente è fuori dalle mie mani, ma si spera che possa essere risolto con un po 'di magia.

Sfondo del problema

Ho un'implementazione di MediaWiki che utilizza attualmente un file .htaccess per prettificare l'URL. Nella configurazione del MediaWiki di magazzino senza la mod_rewrite, ogni articolo del wiki è normalmente accessibile visitando:

www.mywebsite.org/index.php?title=george_clooney_ (attore)

Con il .htaccess (codice seguente), siamo in grado di pulirlo in modo da accedere alla stessa pagina per:

www.mywebsite.org/george_clooney_ (attore)

Questo funziona tutto ciò che dovrebbe. Internamente, non c'è problema qui.

Riepilogo del problema

Il problema è una porzione significativa del traffico del mio wiki proviene da Vbulletin, che ho trovato ha un bug con il modo in cui analizza automaticamente gli URL nei post dei membri. Quando aggiungono il link sopra, VBulletin analizza l'URL in un collegamento di codice BB, ma lascia fuori la parentesi finale. In effetti, il loro codice finale BB è generalmente simile a questo:

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

Il che è sfortunato, perché i membri non lo prendono di solito, e quindi il collegamento li invia a una pagina che non esiste a:

www.mywebsite.org/george_clooney_ (attore

La mia domanda

È possibile, si spera che attraverso una regola di riscrittura, per aggiungere la parentesi di chiusura se viene rilevata una parentesi di apertura non elica?

Per aiutare, il nostro wiki segue un formato di denominazione piuttosto rigoroso, e non prevedo alcuna situazione in cui avremmo un articolo che ha un parentesi di apertura senza parentesi di chiusura. In tutti i casi le parole tra parentesi si trovano alla fine del nome dell'articolo. La nostra convenzione Naming Article è sempre:

Articolo_name o articolo_name_ (tipo)

Quindi, se otteniamo un brutto legame che cerchiamo di visitare "www.mywebsite.org/george_clooney_(actor", mi piacerebbe reindirizzarli automaticamente a "www.mywebsite.org/george_clooney_(actor)". < / P >.

Altri possibili percorsi che ho considerato sta codificando una sezione di suggerimento articolo della pagina 404. Sento che questo sarà un po 'più di lavoro, ma sarà la mia soluzione di go-to se questo piano tistaccessa non funziona.

Ecco cosa ho attualmente per il mio file .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]
.

Qualsiasi aiuto sarebbe molto apprezzato. HTACCESS, e la combinazione del regex destra, è ancora piuttosto nuovo e magico per me.

È stato utile?

Soluzione

È possibile utilizzare questa regola come la tua Regola prioritaria (appena sotto la linea RewriteEngine On):

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

Si suppone che ci sia solo una parentesi mancante nell'URL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top