Использование .htaccess для перенаправления с закрывающей круглой скобкой
-
21-12-2019 - |
Вопрос
Я пытаюсь решить проблему, которая, казалось бы, не в моей власти, но, надеюсь, может быть исправлена с помощью небольшого волшебства .htaccess.
Предыстория проблемы
У меня есть реализация MediaWiki, которая в настоящее время использует файл .htaccess для улучшения URL-адреса.В стандартной конфигурации MediaWiki без mod_rewrite доступ к каждой статье в 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_ (актер
Мой Вопрос
Возможно ли, надеюсь, с помощью правила перезаписи, добавить закрывающую скобку, если обнаружена незакрытая открывающая скобка?
Чтобы помочь, наша wiki придерживается довольно строгого формата именования, и я не предвижу никакой ситуации, когда у нас была бы статья с открывающей скобкой без закрывающей.Во всех случаях слова в круглых скобках располагаются в конце названия статьи.Наше соглашение об именовании статей всегда либо:
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-адресе отсутствует только одна круглая скобка.