我正在尝试解决一个看似无法控制的问题,但希望可以通过一点 .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,以及正确的正则表达式的组合,对我来说仍然是相当新的和神奇的。