Вопрос или проблема
Недавно я настроил вики с использованием MediaWiki, но испытываю серьезные трудности с правильной настройкой конфигурации ShortURL (например, чтобы страницы отображались как Main_Page
вместо index.php?title=Main_Page
). Она установлена в подпапке поддомена (например, http://intranet.example.com/mediawiki/
), и в настоящее время мой файл .htaccess в этой папке mediawiki содержит следующие строки (я создал этот файл, его нет в поставке с MediaWiki):
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/mediawiki/.*$
RewriteCond %{REQUEST_URI} !^/mediawiki/index.php.*$
RewriteCond %{REQUEST_URI} !^/mediawiki/load.php.*$
RewriteCond %{REQUEST_URI} !^/mediawiki/skins/.*$
RewriteRule ^(.*)$ index.php/$1 [L]
А файл LocalSettings.php содержит следующие строки, которые влияют на маршрутизацию запросов страниц:
$wgScriptPath = "/mediawiki";
$wgScriptExtension = ".php";
$wgArticlePath = "/mediawiki/$1";
$wgUsePathInfo = true;
$wgServer = "http://intranet.example.com/";
Я пробовал экспериментировать с этими параметрами, удаляя и добавляя слэши в различных местах, чтобы найти наилучшую рабочую конфигурацию, и в основном все работает так, как вы могли бы ожидать, за исключением перенаправлений, которые происходят после отправки формы (например, после входа в систему/выхода или редактирования страницы).
В этих условиях пользователь каждый раз перенаправляется на http://intranet.example.com//mediawiki/Main_Page
, даже когда Main_Page не является текущей страницей (очень раздражает), и обратите внимание на лишний слэш? Это вызывает ошибку HTTP 404.
На странице редактирования URL действия формы поста — /mediawiki/index.php?title=Main_Page&action=submit
, что, на мой взгляд, нормально. Проблема, похоже, связана с внутренним перенаправлением, которое происходит после завершения обработки, так как изменения на странице сохраняются должным образом.
Не знаю, дает ли это какие-либо подсказки, но я замечаю из сгенерированного исходного кода, что стили и ссылки на скрипты начинаются с http://intranet.example.com//mediawiki/load.php?...
, и этот второй слэш снова появляется (хотя эти ресурсы все равно каким-то образом загружаются нормально).
Насколько я могу судить, я правильно следовал официальным инструкциям по установке и настройке MediaWiki. Буду признателен за любую помощь! Очевидно, что текущее поведение недостаточно надежно. Пользователи, не знакомые с технологиями, не будут знать, что им нужно редактировать URL каждый раз, когда перенаправление ломается!
Если я убираю начальный слэш из $wgArticlePath, то запрос http://intranet.example.com/mediawiki/
приводит к следующим перенаправлениям в моем журнале Apache:
"GET /mediawiki/ HTTP/1.1" 301 -
"GET /mediawiki/mediawiki/Main_Page HTTP/1.1" 301 -
"GET /mediawiki/mediawiki/mediawiki/Mediawiki/Main_Page HTTP/1.1" 301 -
"GET /mediawiki/mediawiki/mediawiki/Mediawiki/mediawiki/Mediawiki/mediawiki/Mediawiki/Main_Page HTTP/1.1" 301 -
и так далее, пока в конечном итоге я не получаю страницу “Bad title” WikiPedia, возвращенную в браузер.
Решение, которое сейчас работает и протестировано — в файле LocalSettings.php, делюсь на случай, если кто-то еще столкнется с этой проблемой:
$wgScriptPath = "/mediawiki";
$wgScriptExtension = ".php";
$wgArticlePath = "/mediawiki/$1";
$wgUsePathInfo = true;
$wgServer = "http://intranet.example.com";
Проблема была вызвана слэшем в конце параметра $wgServer.
В моем случае это было вызвано добавлением настройки
$wgServer = "intranet.example.com";
и как только я изменил это на
$wgServer = "https://intranet.example.com";
все стало нормально.
Ответ или решение
Проблема, с которой вы столкнулись при настройке MediaWiki, касается некорректного поведения перенаправления после отправки форм, особенно заметного при входе и выходе из системы или редактировании страниц. Это может привести к ошибкам HTTP 404 из-за дублирующихся косых черт в URL. Давайте рассмотрим, как разрешить эту проблему, уделяя внимание ключевым аспектам конфигурации.
Актуальные настройки
Файл .htaccess
Ваш текущий файл .htaccess
содержит следующие строки:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/mediawiki/.*$
RewriteCond %{REQUEST_URI} !^/mediawiki/index.php.*$
RewriteCond %{REQUEST_URI} !^/mediawiki/load.php.*$
RewriteCond %{REQUEST_URI} !^/mediawiki/skins/.*$
RewriteRule ^(.*)$ index.php/$1 [L]
Эти строки осуществляют перенаправление запросов, чтобы поддерживать короткие URL. Однако вам необходимо убедиться, что правила корректно обрабатывают запросы и не создают дополнительные косые черты.
Файл LocalSettings.php
Ваши настройки в LocalSettings.php
выглядят следующим образом:
$wgScriptPath = "/mediawiki";
$wgScriptExtension = ".php";
$wgArticlePath = "/mediawiki/$1";
$wgUsePathInfo = true;
$wgServer = "http://intranet.example.com/";
Ключевой проблемой здесь является наличие косой черты в конце строковой переменной $wgServer
. Это может приводить к образованию неправильных форматов URL, как в случае с /mediawiki/Main_Page
, что и вызывает дублирование.
Рекомендации по исправлению
-
Измените значение
$wgServer
:
Убедитесь, что в переменной$wgServer
отсутствует конечная косая черта. Попробуйте настроить значение следующим образом:$wgServer = "http://intranet.example.com";
Либо, если у вас используется HTTPS:
$wgServer = "https://intranet.example.com";
-
Проверка конфигурации:
После изменения переменной$wgServer
, вам следует протестировать перенаправления после отправки форм. Проанализируйте логи вашего веб-сервера, чтобы убедиться, что дополнительные косые черты больше не появляются. -
Перепроверка файла .htaccess:
Убедитесь, что правила в.htaccess
корректно обрабатывают все возможные случаи использования URL. Можно добавить дополнительные условия, чтобы убедиться, что дублирование не происходит.
Заключение
Ваши проблемы с переадресацией в MediaWiki были связаны с неправильной конфигурацией переменной $wgServer
, которая могла вызвать ненужные косые черты в результирующих URL. После внесения изменений и тестирования конфигурации ваше приложение должно работать более стабильно. Учите пользователей вашего вики о возможных путях решения, если они столкнутся с похожими проблемами, чтобы повысить общий уровень удовлетворенности.
Если вам понадобятся дальнейшие советы или предложения по оптимизации работы MediaWiki, не стесняйтесь обращаться за поддержкой.