Использование.htaccess для перенаправления с закрывающей скобкой
Я пытаюсь решить проблему, которая, казалось бы, не в моих руках, но, надеюсь, может быть исправлена с помощью небольшого количества магии.htaccess.
Предыстория проблемы
У меня есть реализация MediaWiki, которая в настоящее время использует файл.htaccess для предварительного URL-адреса. В стандартной конфигурации MediaWiki без mod_rewrite каждая статья в вики обычно доступна через:
www.mywebsite.org/index.php?title=George_Clooney_(actor)
С помощью.htaccess (код ниже), мы можем очистить это, чтобы получить доступ к той же странице, перейдя в:
www.mywebsite.org/George_Clooney_(actor)
Это все работает как надо. Внутренне здесь нет проблем.
Краткое изложение проблемы
Проблема заключается в том, что значительная часть трафика моей вики исходит от vBulletin, который, как я обнаружил, содержит ошибку, связанную с автоматическим анализом URL-адресов в сообщениях участников. Когда они добавляют ссылку выше, vBulletin анализирует URL-адрес в ссылку BB-кода, но пропускает заключительную скобку. Фактически, их окончательный BB-код обычно выглядит так:
[url]http://www.mywebsite.org/George_Clooney_(actor[/url])
Что вызывает сожаление, потому что участники обычно не ловят его, а затем ссылка отправляет их на страницу, которая не существует по адресу:
www.mywebsite.org/George_Clooney_(actor
Мой вопрос
Можно ли, надеюсь, с помощью правила переписать, добавить закрывающую скобку, если обнаружена открытая скобка?
Чтобы помочь, наша вики придерживается довольно строгого формата именования, и я не предвижу ситуации, когда у нас будет статья с открывающей скобкой без закрывающей скобки. Во всех случаях слова в скобках располагаются в конце названия статьи. Наше соглашение об именах статей всегда либо:
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, и комбинация правильного регулярного выражения, все еще довольно нова и волшебна для меня.
1 ответ
Вы можете использовать это правило в качестве самого первого правила (чуть ниже RewriteEngine On
линия):
RewriteRule ^(.*?\(.*?[^)])$ /$1) [R=301,L,NE]
Предполагается, что в URL отсутствует только одна скобка.