Использование .htaccess для перенаправления с закрывающей круглой скобкой

StackOverflow https://stackoverflow.com//questions/22055974

Вопрос

Я пытаюсь решить проблему, которая, казалось бы, не в моей власти, но, надеюсь, может быть исправлена с помощью небольшого волшебства .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-адресе отсутствует только одна круглая скобка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top