Руководство:Короткие URL/Apache
Части этой страницы (связанных с Apache2 configuration instructions) устарели. |
![](http://upload.wikimedia.org/wikipedia/mediawiki/8/83/ENWP-ShortURL.png)
Эти инструкции помогают настроить короткие 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
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 для приведенных ниже примеров.Первое правило, которое вам понадобится в вашей конфигурации, - это включить механизм перезаписи:
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]
^/?
в конфигурации важно, потому что разные настройки Apache используют разные регулярные выражения. Некоторые хотят использовать ^wiki/
, а некоторые хотят, чтобы вы использовали ^/wiki/
. ?
в /?
позволяет этому правилу работать в обоих контекстах.%{DOCUMENT_ROOT}
в конфигурации гарантирует, что Apache имеет правильный, не двусмысленный путь. Однако он не работает на некоторых плохо настроенных бесплатных хостах. Если у вас возникли проблемы с правилами перезаписи 404 или 403, удалите части %{DOCUMENT_ROOT}
и повторите попытку.RewriteEngine
:Options +FollowSymLinks
[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
, когда закончите.
См. также