Руководство:Короткие URL/Apache

From mediawiki.org
This page is a translated version of the page Manual:Short URL/Apache and the translation is 100% complete.
Короткие URL-адреса Википедии.

Эти инструкции помогают настроить короткие URL-ссылки на Apache. Веб-сервер LiteSpeed совместим с Apache и может быть настроен относительно одинаково. Для получения информации о том, что такое короткие URL-адреса, или получить инструкции по настройке для других серверов см. Руководство:Короткий URL-адрес . Если Вы не знаете, какой веб-сервер вы используете, так как вы используете какой-то веб-хостинг, очень вероятно, что ваш хост использует Apache.

Настройка

Перед началом работы необходимо определиться с именем виртуального пути "короткий url".

В этом руководстве мы рекомендуем/предполагаем следующее. Не забудьте использовать свои собственные пути, если они отличаются.

  • Каталог MediaWiki находится по адресу: /w
  • Требуемый формат короткого URL: /wiki/Page_title

Настройка сервера

Найдите нужный файл

Рекомендуется настроить короткие URL-адреса в Apache путем редактирования конфигурационных файлов Apache. Для этого требуется доступ к конфигурации сервера. Если вы находитесь на общем хосте, вы, скорее всего, не и нужно будет использовать файл .htaccess вместо этого. Использование файлов .htaccess менее эффективно и не дает вам столько контроля, когда дело доходит до причудливых настроек с несколькими доменами, но они достаточно мощны, чтобы настроить большинство коротких конфигураций url. Пользователи LiteSpeed должны использовать метод .htaccess.

Используйте инструкции в одном из следующих двух разделов, в зависимости от того, есть ли у вас root-доступ или нужно использовать .htaccess вместо этого.

Найдите файл конфигурации Apache (root-доступ)

Корректный файл конфигурации для редактирования для корневых конфигураций может находиться в одном из нескольких мест.

Правильный конфигурационный файл для редактирования - это тот, который находится в /etc/apache2/sites-available/, где была настроена конфигурация для вашей вики. Большинство дистрибутивов linux настраивают Apache с набором папок sites-available/ и sites-enabled/.

Правильный конфигурационный файл для редактирования находится в $code3, где была настроена конфигурация для вашей Вики. Если Вы не настроили его и используете /var/www по умолчанию для настройки Вики, то вы можете отредактировать /etc/apache2/sites-available/default.

Не забудьте включить переопределения с помощью AllowOverride All в /etc/apache2/apache2.conf. Он отключен по умолчанию в Ubuntu 12.04 и Ubuntu 12.10.

Если в вашем дистрибутиве нет этих каталогов, вы должны отредактировать файл конфигурации Apache напрямую. Этот файл должен быть в /etc/apache2/apache2.conf. Обратите внимание, что это используется, чтобы быть названным httpd.conf, если у вас есть httpd.conf и не apache2.conf в httpd.conf является тот, который вы хотите редактировать.

Если ваш Apache config не находится ни в одном из этих мест, вы должны обратиться к документации для любой системы, которую Вы использовали для установки Apache, и найти расположение файла конфигурации Apache.

Если вы находитесь на виртуальном хостинге без доступа к файлам конфигурации Apache вы должны использовать файл .htaccess вместо этого.

В конфигурационном файле Apache у вас, скорее всего, будет блок VirtualHost, содержащий вашу wiki. Если он у вас есть, то это то место, куда будут отправляться ваши правила перезаписи. Конфигурация RewriteRule не наследуется, поэтому не помещайте эти параметры конфигурации в глобальную конфигурацию, если вы используете VirtualHost.

После того, как вы настроили конфигурацию, как указано выше, внутри Apache, вам нужно будет перезапустить Apache, чтобы заставить его применить новую конфигурацию.

  • Если вы используете Plesk или cPanel, у него должен быть способ перезапуска сервера.
  • Из командной строки команда обычно выглядит примерно так: apache2ctl graceful, apachectl graceful, /etc/init.d/apache2 restart или, как в последних версиях Fedora, systemctl reload httpd.service. Эти команды должны выполняться от имени пользователя root, обычно с префиксом sudo ....

Куда девать .htaccess

В Apache AllowOverride определяет, разрешены ли файлы .htaccess для управления конфигурацией сервера. Если эти правила перезаписи вообще ничего не делают. Вам, возможно, придется изменить параметр AllowOverride в конфигурации Apache, чтобы включить FileInfo. Для этого также требуется Options FollowSymLinks для каталога.

Если вы используете файл .htaccess, вам нужно будет отредактировать или создать этот файл. Найдите путь, который содержит как ваш путь к скрипту, так и ваш виртуальный путь. Обычно это означает верхний каталог вашего сайта, но давайте рассмотрим несколько примеров:

wgScript Пример wgArticlePath Пример расположение .htaccess
/w/index.php https://www.mediawiki.org/w/index.php?... /wiki/Page_title https://www.mediawiki.org/wiki/Manual:Short_URL /.htaccess
/w/index.php https://www.mediawiki.org/w/index.php?... /Page_title https://www.mediawiki.org/Manual:Short_URL /.htaccess
/mediawiki/index.php https://www.mediawiki.org/mediawiki/index.php?... /view/Article https://www.mediawiki.org/view/Manual:Short_URL /.htaccess
/mysite/mw/index.php https://www.mediawiki.org/mysite/mw/index.php?... /mysite/view/Page_title https://www.mediawiki.org/mysite/view/Manual:Short_URL /mysite/.htaccess

Обратите внимание, что если вы хотите сделать перенаправление с основного домена на главную страницу вашей вики (например, http://example.org/ → http://example.org/wiki/Main_Page). Тогда вам всегда нужно настраивать файл .htaccess на верхнем уровне, даже если другие каталоги вложены глубже.

Настройка правил перезаписи

Остальную часть этого раздела легче понять после краткого ознакомления с синтаксисом Apache, но этот краткий обзор не заменяет полную документацию Apache:

RewriteCond TestString CondPattern
RewriteRule Pattern Substitution [flags]

Директива RewriteCond определяет условие, которое должно быть true, прежде чем может быть применен следующий за ним RewriteRule. Одна или несколько директив RewriteCond могут предшествовать директиве RewriteRule, и все директивы RewriteCond, которые предшествуют RewriteRule, должны быть истинными, прежде чем это правило может быть применено к URI. В следующих примерах TestString принимает форму ссылки на переменные сервера, например %{ NAME_OF_VARIABLE }. Хотя существует много CondPatterns, в следующих примерах используются -f (true, когда testString является обычным файлом) и -d (true, когда testString является каталогом), и им предшествует символ отрицания, !.

Директива RewriteRule может быть вызвана как в файле httpd.conf, так и в любом файле .htaccess, но когда правило перезаписи появляется в файлах .htaccess, неявный контекст для каждого каталога влияет на шаблон Pattern , поскольку правила относятся к текущему каталогу. В файлах .htaccess шаблоны являются не по отношению к полному исходному URI. Для файлов .htaccess шаблоны никогда не должны начинаться с косой черты, /, потому что вложенная строка URI никогда не будет начинаться с /. В следующих примерах используется флаг L, значение которого Немедленно остановите процесс перезаписи и больше не применяйте никаких правил.


Модуль mod_rewrite должен быть включен на серверах Apache или LiteSpeed для приведенных ниже примеров.
Если вы используете VirtualHosts, убедитесь, что настройки размещены внутри объявления VirtualHost

Первое правило, которое вам понадобится в вашей конфигурации, - это включить механизм перезаписи:

RewriteEngine On

Теперь нам нужно правило, чтобы сделать ваш путь к статье виртуальным путем, указывающим на index.php . Обязательно замените /wiki и /w/index.php путями, которые вы выбрали в начале (если они отличаются).

RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]
Если вы решите настроить это, обязательно никогда не включайте ?title=$1 или что-то в этом роде в переписывании. Включение запроса приведет к переопределению встроенной обработки MediaWiki и создаст ошибки в вашей вики из-за того, что Apache переписывает запросы.[1] Цель здесь состоит в том, чтобы псевдонимировать пути к /index.php а затем пусть MediaWiki сама позаботится о синтаксическом анализе и маршрутизации URL-адреса на основе конфигурации в LocalSettings.php.

Если вы используете корневой URL-адрес вместо обычного короткого URL-адреса, вам нужно будет вместо этого использовать следующее (чтобы убедиться, что существующие файлы и каталоги не отображаются как статьи, например "/index.php", "/images" и т.д.):

RewriteCond %{REQUEST_URI} !^/w/rest\.php
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/w/index.php [L]
Если вы используете путь к скрипту и путь к статье, которые совпадают, например, /mywiki/index.php и /mywiki/Article, вам также нужно будет использовать те же две строки RewriteCond в вашем RewriteRule. Однако, пожалуйста, обратите внимание, что нет никаких реальных веских причин для настройки вашей вики таким образом. Если путь к вашей статье уже является подкаталогом, вам следует просто переместить путь к скрипту вашей вики-страницы в другой каталог. Например, /w/index.php и /mywiki/Article или /my/index.php и $article3.

Иногда приведенный выше пример не работает. Вместо этого может сработать следующее (вы не можете установить это в .htaccess, для этого вам нужен root-доступ!):

Alias /wiki /path/to/your/webroot/w/index.php

При желании вы можете включить правило для отображения Главной страницы на самом пути, чтобы упростить навигацию, когда люди посещают URL-адреса без указанного заголовка страницы:

# Перенаправление / на Главную страницу
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

Конечный результат должен выглядеть примерно так:

## https://www.mediawiki.org/wiki/Manual:Short_URL/Apache

# Включаем механизм перезаписи
RewriteEngine On

# Короткий URL-адрес для вики-страниц
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]

# Перенаправление / на Главную страницу
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

или, если вы использовали способ с оператором "Alias":

## https://www.mediawiki.org/wiki/Manual:Short_URL/Apache

Alias /wiki /path/to/your/webroot/w/index.php
# Включаем механизм перезаписи
RewriteEngine On

# Перенаправление / на Главную страницу
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]
Убедитесь, что порядок правил, приведенный в примере, сохраняется, т.е. "Короткий URL для вики-страниц" должен быть проверен перед "Перенаправлением / на главную страницу".
Значение ^/? в конфигурации важно, потому что разные настройки Apache используют разные регулярные выражения. Некоторые хотят использовать ^wiki/, а некоторые хотят, чтобы вы использовали ^/wiki/. ? в /? позволяет этому правилу работать в обоих контекстах.
%{DOCUMENT_ROOT} в конфигурации гарантирует, что Apache имеет правильный, не двусмысленный путь. Однако он не работает на некоторых плохо настроенных бесплатных хостах. Если у вас возникли проблемы с правилами перезаписи 404 или 403, удалите части %{DOCUMENT_ROOT} и повторите попытку.
Если ваш SCRIPT_PATH ведет к какому-либо другому физическому местоположению (известному как "символическая ссылка" в Unix, "ярлык" в Windows, "псевдоним" в Mac OS X), вам может потребоваться разрешить Apache следовать им. Вы можете сделать это, добавив эту строку над RewriteEngine:
Options +FollowSymLinks
Если путь к каталогу вашего скрипта указан веб-сервером с помощью директивы Alias, как это, в частности, в Debian, RewriteRule будет работать до тех пор, пока вы добавляете флаг PT (т.е.: измените [L] на [PT,L]), чтобы передать запрос следующему обработчику - mod_alias, который будет правильно перенаправлять запрос в соответствии с Переполнение стека

LocalSettings.php

Нам нужно сделать следующие конфигурации в LocalSettings.php:

## https://www.mediawiki.org/wiki/Manual:Short_URL
$wgScriptPath = "/w";        // это уже должно было быть настроено таким образом
$wgArticlePath = "/wiki/$1";

Если после завершения настройки вы получите страницу "Внутренняя ошибка" с надписью "Обнаружен цикл перенаправления!", возможно, вы используете что-то другое, кроме mod_php. Если это так, вам нужно явно включить короткие URL-адреса, используя следующую строку в вашем файле "LocalSettings.php":

$wgUsePathInfo = true;

Если все еще существует "внутренняя ошибка", проверьте файлы журналов вашего сервера. Возможно, вам придется включить модуль mod_rewrite.

Простые инструкции

Ниже приводится краткое описание того, что делать, если вы не делаете ничего отличного от того, что рекомендует MediaWiki. Если вы хотите сделать что-то еще, вам нужно прочитать все подробности выше.

  • https://example.com/wiki/Main_Page (расположение url-адреса)
  • /home/me/public_html/mediawiki/w/index.html (расположение index.html)
  • /home/me/public_html/mediawiki/.htaccess (расположение .htaccess)

Обратите внимание, что файл .htaccess находится не в каталоге "w", а в каталоге над ним.

Исходный код .htaccess

RewriteEngine On

# главное правило перезаписи
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]

# Перенаправление / на Главную страницу
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

Исходный код LocalSettings.php

$wgScriptPath = "/w";
$wgArticlePath = "/wiki/$1";

Онлайн мастер

Возможно, этот мастер поможет людям генерировать короткие URL-адреса, которые им нужны. (ПРИМЕЧАНИЕ: Это необходимо проверить или удалить раздел).

Автоматический мастер (требуется MediaWiki 1.17 или более поздняя версия) может помочь:

Если вам просто нужна быстрая настройка вики или вы находите руководство запутанным, то вы можете попробовать сначала этот инструмент. Если вы это сделаете, обратите внимание, что вам нужно будет отредактировать или создать файл .htaccess. Если вы создаете его заново, пожалуйста, прочитайте далее в этой статье о том где разместить файл .htaccess, и учтите, что этот файл, скорее всего, будет находиться в другой папке, чем другой файл, который нужно будет отредактировать (LocalSettings.php), который находится в папке установки (/w, если вы следовали рекомендациям MediaWiki). Также обратите внимание, что использование этого мастера не будет работать в вики с брандмауэром или в частных вики. В этом случае вы все равно можете попробовать, сделав свою вики временно публичной, установив $wgGroupPermissions['*']['read'] на true. Не забудьте изменить его обратно на false, когда закончите.

См. также

Примечания