Перенаправление страницы пользователя Mediawiki и страницы обсуждения пользователя на внешний URL

У меня есть mediawiki, установленные в папке mydomain.com/wiki/, и у меня также установлен phpbb в корне, например mydomain.com. У меня уже есть страницы профиля пользователя в моей установке phpbb, и URL-адреса этих страниц выглядят следующим образом: mydomain.com/memberlist.php?mode=viewprofile&un=XYZ

Что я хочу сделать, так это то, что я не хочу использовать пользовательские страницы Mediawiki и страницы обсуждения пользователей. Вместо этого я хочу перенаправить все пользовательские страницы на страницу профиля пользователя phpbb, которая находится в корневом каталоге. Я попытался перенаправить с помощью метода htaccess, но не смог заставить его работать. Мой htaccess внутри корневой папки имеет следующее правило перезаписи:

redirect 301 wiki/index.php/User:* http://www.mydomain.com/memberlist.php?mode=viewprofile&un=*

Мне нужна помощь с этим:

1) Может ли кто-нибудь взглянуть на приведенный выше код и сообщить мне, если у меня что-то не так или это невозможно?

2) У меня есть * рядом с «Пользователь:», поскольку я хочу перенести все существующие страницы пользователей Mediawiki на страницу memberlist.php phpbb. Это верно?

3) Также я заметил, что в Mediawiki страницы пользователей имеют разные типы URL. Например, иногда это выглядит так: wiki / index.php / User: XYZ (или) wiki / index.php? Title = User: XYZ (или) wiki / index.php? Title = User: XYZ & action = edit & redlink = 1 и т. Д. ... Итак, в этом случае мне нужно добавить разные правила перенаправления htaccess для каждого типа URL-адресов?

4) Есть ли другой метод, например, добавление правила перенаправления в LocalSettings.php или что-то еще?

5) Как правильно это сделать?

Я в тупике!


person Neel    schedule 11.09.2013    source источник


Ответы (2)


Может ли кто-нибудь взглянуть на приведенный выше код и сообщить мне, если у меня что-то не так или это невозможно?

Да, ваша директива Redirect неверна. Это не регулярное выражение, поэтому в нем не может быть таких вещей, как *, если только вы на самом деле не пытаетесь сопоставить с "*".

Вероятно, вы не сможете выполнить перенаправление из файла htaccess в корневом каталоге, поскольку Mediawiki использует свой собственный htaccess. Итак, в файле htaccess, который находится в папке /wiki/, попробуйте добавить это выше любых правил перезаписи, которые уже существуют:

RewriteCond %{QUERY_STRING} ^title=User:([^&]+) [NC]
RewriteRule ^ /memberlist.php?mode=viewprofile&un=%1 [L,R=301]

Это должно позаботиться об URL-адресах, которые выглядят так: /index.php?title=User:XYZ

RewriteRule User:(.*)$ /memberlist.php?mode=viewprofile&un=$1 [L,R=301]

И это должно позаботиться об URL-адресах, которые выглядят так: /User:XYZ

Есть ли другой метод, например, добавление правила перенаправления в LocalSettings.php или что-то еще?

Я не знаю ничего, что вы могли бы установить в LocalSettings.php для выполнения такого рода перенаправления, но я действительно не удивился бы, если бы для этой проблемы было какое-то конкретное решение Mediawiki, возможно, какой-то дополнительный код, который автоматически перенаправляет страницы в определенное пространство имен.

person Jon Lin    schedule 11.09.2013
comment
Спасибо, Джон ... Извините, это может показаться вам основным вопросом ... Поскольку в папке wiki нет файла htaccess по умолчанию, могу ли я просто создать пустой файл htaccess и поместить в него указанное выше перенаправление? Нужно ли мне что-нибудь добавить к нему, чтобы перенаправление работало? есть ли образец файла htaccess, который я могу скачать для вики? Извините, я невежественен .. - person Neel; 12.09.2013
comment
@blackops_programmer, если в папке Mediawiki нет файла htaccess, есть ли правила Mediawiki в файле htaccess корня документа? Или все ваши вики-страницы выглядят так: /wiki/index.php?title=MainPage? Вы хотите добавить эти правила там, где у вас есть правила mediawiki, но непосредственно перед ними в том же файле. - person Jon Lin; 12.09.2013
comment
А, понял .. Атм У меня действительно нет правил mw в корневом файле htaccess. Опять же, я просто тестирую на своем локальном хосте, но все будет по-другому, когда я установлю его на свой действующий сайт в эти выходные. Также я предполагаю, что тогда мне, вероятно, потребуется создать файл htaccess, поскольку я также планирую добавить метод короткого URL-адреса. Как бы то ни было, на данный момент я использовал онлайн-инструмент генератора htaccess, чтобы создать простой файл htaccess для моей вики-папки localhost, а затем добавил ваше данное правило перезаписи, и оно прекрасно работает. СПАСИБО БОЛЬШОЕ!! Это именно то, чего я пытался достичь, и ваша поддержка была на высоте! :) - person Neel; 12.09.2013
comment
Привет, Джон, я только что установил свою вики на свой действующий сайт вчера вечером, и я пытался заставить это правило перезаписи работать. Я установил вики в папку / w / и, используя метод коротких URL-адресов, перенаправляю основные URL-адреса на / wiki / Page_Title в соответствии с приведенными здесь инструкциями: mediawiki.org/wiki/Manual:Short_URL/Apache Когда я добавляю указанное выше правило перезаписи в свой htaccess внутри папки / w /, он перенаправляет URL с помощью? title =, но он не перенаправляет URL-адреса с помощью User: xyz, поскольку эти URL-адреса перезаписываются в корневом htaccess в wiki / User: xyz. Как я могу заставить это работать, если реализован короткий URL-адрес? - person Neel; 17.09.2013
comment
@blackops_programmer Удалите ,R=301 из флагов перезаписи. - person Jon Lin; 17.09.2013
comment
Привет, Джон, да, это работает, когда URL-адрес похож на w / index.php / User: xyz. Но если URL-адрес основан на созданном коротком URL-адресе, таком как wiki / User: xyz, тогда он не работает. Но, возможно, мне не стоит беспокоиться об URL-адресе wiki / User: xyz, поскольку я предполагаю, что все URL-адреса страниц пользователей в wiki будут либо направлять на w / index.php / User: или на w / index.php? Title = User :, это правильно? - person Neel; 17.09.2013
comment
@blackops_programmer Правило RewriteRule User:(.*)$ /memberlist.php?mode=viewprofile&un=$1 [L,R=301] должно позаботиться об этом. Поскольку в регулярном выражении нет ^, User:xxxx может быть где угодно во всем URI, и он будет соответствовать. Если оно не применяется, то раньше применяется другое правило. Все вышеперечисленные правила должны быть перед любым правилом mediawiki, которое появляется в вашем файле htaccess. - person Jon Lin; 18.09.2013
comment
Привет, у меня было это правило в файле htaccess внутри моей папки «w», и поэтому оно перенаправляло только URL-адреса w / index.php / User:, а не URL-адреса wiki / User:. После вашего совета я переместил эти правила в корневой файл htaccess и добавил это перед правилом перезаписи коротких URL-адресов, и оно работает! Еще раз спасибо, Джон. Вы были невероятно полезны !! Если вы не возражаете, не могли бы вы помочь мне еще с одним правилом перезаписи, пожалуйста? Я пытаюсь перенаправить / wiki / url на / wiki / Main_Page. Я разместил его здесь: stackoverflow.com/questions/18843356/ - person Neel; 18.09.2013
comment
Привет, Джон! Вот еще раз обновленная информация по этому поводу. Вот что я обнаружил: перенаправление для w / index.php / User: xyz и w / index.php? Title = User: xyz работает только тогда, когда указанное выше правило перенаправления в htaccess внутри папки 'w'. Это правило перезаписи находится в самом начале. И перенаправление для wiki / User: xyz работает только при указанном выше правиле перенаправления в htaccess внутри корневой папки. Не понимаю, почему это так. Итак, на данный момент у меня есть эти правила перезаписи как в root / .htaccess, так и в root / w / .htaccess - person Neel; 18.09.2013
comment
Вот последнее обновление по этому поводу. Вы были правы все это время. Он не работал из-за моей глупой ошибки. Вы постоянно упоминали, что нужно добавить эти правила перезаписи перед всеми другими правилами перезаписи. Я думал, что сделал это, и только сегодня я заметил, что до этого было еще одно правило перезаписи, которое вызывало проблему с этим. Как только я добавил эти правила вверху, все заработало отлично. Так что в основном это была моя глупость и невнимательность. Извините за то, что беспокою вас по этому поводу. Теперь все работает отлично. Еще раз спасибо, Джон. :) - person Neel; 19.09.2013

Я думаю, что лучше перенаправлять эти URL-адреса в MediaWiki, а не на вашем веб-сервере. Еще лучше, давайте сделаем целевой URL каноническим, чтобы все знали, где им лучше всего искать.

Аналогично главная страница без перенаправления, используйте ловушку GetLocalURL для запуска кода в 1_. Примерно так.

$wgHooks['GetLocalURL'][] = function ( &$title, &$url, $query ) {
    $ns = $title->getNamespace();
    // Check for user namespaces but ignore subpages.
    if ( !$title->isSubpage() && ( $ns === 2 || $ns === 3 ) ) {
        $url = 'http://www.example.org/memberlist.php?mode=viewprofile&un=' . $title->getText();
    }
};
person Nemo    schedule 01.11.2015