使用带右括号的.htaccess重定向

使用带右括号的.htaccess重定向,.htaccess,mod-rewrite,redirect,mediawiki,pretty-urls,.htaccess,Mod Rewrite,Redirect,Mediawiki,Pretty Urls,我正试图解决一个似乎无法控制的问题,但希望能用一点.htaccess魔法解决 问题的背景 我有一个MediaWiki的实现,目前使用.htaccess文件美化URL。在没有mod_rewrite的stock MediaWiki配置中,wiki中的每篇文章通常通过访问访问: www.mywebsite.org/index.php?title=George\u Clooney\u演员 使用下面的.htaccess代码,我们可以清理这些内容,以便通过转到以下位置访问同一页面: www.mywebsit

我正试图解决一个似乎无法控制的问题,但希望能用一点.htaccess魔法解决

问题的背景

我有一个MediaWiki的实现,目前使用.htaccess文件美化URL。在没有mod_rewrite的stock MediaWiki配置中,wiki中的每篇文章通常通过访问访问:

www.mywebsite.org/index.php?title=George\u Clooney\u演员

使用下面的.htaccess代码,我们可以清理这些内容,以便通过转到以下位置访问同一页面:

www.mywebsite.org/George_Clooney_actor

这一切都正常运转。在内部,这里没有问题

问题摘要

问题是我的维基有很大一部分流量来自vBulletin,我发现vBulletin在自动解析成员帖子中的URL方面存在缺陷。当他们添加上面的链接时,vBulletin将url解析为BB代码链接,但省略了结尾括号。事实上,他们的最终BB代码通常如下所示:

[url]http://www.mywebsite.org/George_Clooney_(actor[/url])
这是很不幸的,因为成员通常不会捕捉到它,然后链接会将它们发送到一个不存在于以下位置的页面:

www.mywebsite.org/George_Clooney_actor

我的问题

如果检测到未闭合的左括号,是否可能通过重写规则添加右括号

为了提供帮助,我们的wiki遵循一种非常严格的命名格式,我不认为有任何情况下我们的文章会有一个左括号而没有右括号。在所有情况下,括号中的单词都位于文章名称的末尾。我们的文章命名约定始终为:

物品名称或物品名称类型

因此,如果我们得到一个试图访问www.mywebsite.org/George_Clooney_actor的坏链接,我想自动将它们重定向到www.mywebsite.org/George_Clooney_actor

我考虑过的其他可能的途径是编写404页面的文章建议部分。我觉得这将是一个多一点的工作,但将是我的解决方案,如果这个htaccess计划不工作

以下是我目前拥有的.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]

任何帮助都将不胜感激。htaccess和正确的正则表达式的组合对我来说仍然是非常新和神奇的。

您可以将此规则作为您的第一条规则,就在“在线重写引擎”下面:

这是假设URL中只缺少一个括号

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