Руководство:Короткие URL/Apache
Части этой страницы (связанных с Apache2 configuration instructions) устарели. |

Эти инструкции помогают настроить короткие URL-ссылки на Apache. Веб-сервер LiteSpeed совместим с Apache и может быть настроен относительно одинаково. Для получения информации о том, что такое короткие URL-адреса, или получить инструкции по настройке для других серверов см. Руководство:Короткий URL-адрес. Если Вы не знаете, какой веб-сервер вы используете, так как вы используете какой-то веб-хостинг, очень вероятно, что ваш хост использует Apache.
For the simplest instructions see Simple instructions.
Настройка
Перед началом работы необходимо определиться с именем виртуального пути "короткий url".
В этом руководстве мы рекомендуем/предполагаем следующее. Не забудьте использовать свои собственные пути, если они отличаются.
- Каталог MediaWiki находится по адресу:
/w - Требуемый формат короткого URL: $code2
- The desired short URL format is:
/wiki/Page_title
Do not use the same name for the MediaWiki directory (/w in the example here) and the top level of the URL (/wiki in the example here).
Настройка сервера
Найдите нужный файл
Рекомендуется настроить короткие 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
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 на верхнем уровне, даже если другие каталоги вложены глубже.
Enable mod_rewrite
On Debian 12, run the command "/usr/sbin/a2enmod rewrite" as root.
Настройка правил перезаписи
Остальную часть этого раздела легче понять после краткого ознакомления с синтаксисом 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 , поскольку правила относятся к текущему каталогу. В файлах $hta2 шаблоны являются не по отношению к полному исходному URI. Для файлов $hta3 шаблоны никогда не должны начинаться с косой черты, $slash1, потому что вложенная строка URI никогда не будет начинаться с $slash2. В следующих примерах используется флаг $l, значение которого Немедленно остановите процесс перезаписи и больше не применяйте никаких правил.
In .htaccess files, Patterns are not relative to the complete, original URI.
For .htaccess files, Patterns should never start with a forward slash, /, because the URI sub-string will never begin with a /.
The examples that follow use the L flag whose meaning is Stop the rewriting process immediately, and don't apply any more rules.
Модуль mod_rewrite должен быть включен на серверах Apache или LiteSpeed для приведенных ниже примеров.
For Apache use the command sudo a2enmod rewrite followed by sudo systemctl restart apache2.
Первое правило, которое вам понадобится в вашей конфигурации, - это включить механизм перезаписи:
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]
^wiki/ and some want you to use ^/wiki/. The ? in /? allows this rule to work in both contexts.%{DOCUMENT_ROOT} в конфигурации гарантирует, что Apache имеет правильный, не двусмысленный путь. Однако он не работает на некоторых плохо настроенных бесплатных хостах. Если у вас возникли проблемы с правилами перезаписи 404 или 403, удалите части %{DOCUMENT_ROOT} и повторите попытку.RewriteEngine:Options +FollowSymLinksLocalSettings.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. Если вы хотите сделать что-то еще, вам нужно прочитать все подробности выше.
Simple setup presumes:
- The MediaWiki folder was renamed
wand put in the web server's document root (the directoryindex.htmlwould be found, like/path/to/your/webroot/index.html). - The URL shows
/wiki/(e.g., https://example.com/wiki/Main_Page). - The
.htaccessfile goes in the web server's document root and not in thewfolder but the directory above it (e.g.,/path/to/your/webroot/.htaccess).
Исходный код .htaccess
RewriteEngine On
# The "RewriteEngine On" only needs to occur once per context (do not repeat)
# Server converts URL to pathname for the file or directory, stored in REQUEST_FILENAME
# If the pathname does not exist the request is passed to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# main rewrite rule
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L,QSA]
# Redirect / to Main Page
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L,QSA]
^/? in the config is important because different Apache setups use different regexps. Some want you to use ^wiki/ and some want you to use ^/wiki/. The ? in /? allows this rule to work in both contexts.
Исходный код LocalSettings.php
$wgScriptPath = "/w";
$wgArticlePath = "/wiki/$1";
$wgUsePathInfo = true;
Онлайн мастер
Возможно, этот мастер поможет людям генерировать короткие URL-адреса, которые им нужны. (ПРИМЕЧАНИЕ: Это необходимо проверить или удалить раздел).
Автоматический мастер (требуется MediaWiki 1.17 или более поздняя версия) может помочь:
Если вам просто нужна быстрая настройка вики или вы находите руководство запутанным, то вы можете попробовать сначала этот инструмент.
Если вы это сделаете, обратите внимание, что вам нужно будет отредактировать или создать файл .htaccess.
Если вы создаете его заново, пожалуйста, прочитайте далее в этой статье о том где разместить файл .htaccess, и учтите, что этот файл, скорее всего, будет находиться в другой папке, чем другой файл, который нужно будет отредактировать (LocalSettings.php), который находится в папке установки (/w, если вы следовали рекомендациям MediaWiki).
Также обратите внимание, что использование этого мастера не будет работать в вики с брандмауэром или в частных вики.
В этом случае вы все равно можете попробовать, сделав свою вики временно публичной, установив $wgGroupPermissions['*']['read'] на true.
Не забудьте изменить его обратно на false, когда закончите.
См. также