1

我正在尝试解决一个看似无法控制的问题,但希望可以通过一点 .htaccess 魔法来解决。

问题的背景

我有一个 MediaWiki 的实现,它当前使用 .htaccess 文件来美化 URL。在没有 mod_rewrite 的库存 MediaWiki 配置中,wiki 中的每篇文章通常通过以下方式访问:

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

使用 .htaccess(下面的代码),我们可以清理它,以便可以通过以下方式访问同一页面:

www.mywebsite.org/George_Clooney_(演员)

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

问题总结

问题是我的 wiki 流量的很大一部分来自 vBulletin,我发现它有一个错误,它如何自动解析成员帖子中的 URL。当他们添加上面的链接时,vBulletin 将 url 解析为 BB 代码链接,但省略了结尾括号。事实上,他们最终的 BB Code 大致是这样的:

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

这是不幸的,因为成员通常不会抓住它,然后链接将他们发送到一个不存在的页面:

www.mywebsite.org/George_Clooney_(演员

我的问题

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

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

Article_Name 或 Article_Name_(类型)

所以,如果我们得到一个试图访问“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,以及正确的正则表达式的组合,对我来说仍然是相当新的和神奇的。

4

1 回答 1

0

您可以将此规则用作您的第一条规则(就在下面RewriteEngine On一行):

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

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

于 2014-02-27T03:42:48.067 回答