我试图解决一个看似不在我手中的问题,但希望可以解决一点问题。htaccess魔术.

问题的背景

我有一个MediaWiki的实现,目前使用an。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代码通常是这样的:

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

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

www.mywebsite.org/George_Clooney_(演员

我的问题

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

为了帮助我们,我们的维基遵循一个非常严格的命名格式,我没有预见到任何情况下,我们会有一篇没有左括号的文章。在所有情况下,括号中的单词都位于文章名称的末尾。我们的文章命名约定总是要么:

Article_Name或Article_Name_(类型)

所以,如果我们得到一个不好的链接,试图访问"www.mywebsite.org/George_Clooney_(演员",我想自动将它们重定向到"www.mywebsite.org/George_Clooney_(演员)"。

我考虑过的其他可能的路线是编码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,以及正确的正则表达式的组合,对我来说仍然是相当新的和神奇的。

有帮助吗?

解决方案

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top