매뉴얼:짧은 URL/Apache

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Short URL/Apache and the translation is 69% complete.

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎français • ‎polski • ‎русский • ‎中文 • ‎日本語 • ‎한국어
Wikipedia's short URLs.

Apache에는 아파치 웹서버에서 짧은 URL을 셋팅하기 위해 사전에 수행해야 할것들 입니다. LiteSpeed 웹서버는 Apache와 호환되며 같은 방식으로 설정될 수 있습니다. 다른 웹서버들을 위한 설정 방법을 얻고 싶거나 짧은 URL이 무엇인지에 대해 알려면 $2를 참고하세요. 어떤 웹호스팅 서비스를 사용중이나 어떤 웹 서버 소프트웨어를 사용하는지 모른다면, 보통 웹호스팅 서비스들은 Apache를 활용하고 있을 가능성이 높습니다.

The LiteSpeed webserver is Apache compatible and can be configured in relatively the same way. For information on what Short URLs are or to get instructions on configuration for other servers see 매뉴얼:Short URL . If you don't know what webserver you're using since you're using some sort of web hosting service, it's very likely that your host is using Apache.

계획하기

시작하기 앞서, 앞으로 짧게 줄여서 사용하게될 가상 URL 경로를 결정해야 합니다.

이 메뉴얼에서는 우리가 권장하거나 따르고 있는 방법들을 소개합니다. 자신만의 경로를 사용하려 한다면 일부 다른 형태가 될 수 있음을 유의해주세요.

  • 미디어 위키가 설치된 디렉토리: /w
  • 가상 URL의 형태: /wiki/Page_title

아래 웹사이트는 이 과정들을 일부 자동으로 수행해줍니다. (미디어위키 1.17 혹은 이후 버젼에서만 가능)

자신만의 위키를 빠르게 설정하거나 헷갈리지 않도록 가이드를 찾고 있다면, 위 웹사이트를 먼저 방문해 보세요. 그러나, 기억해야 할것은 아마 방화벽이 설치되어 있거나 개인 위키에서는 제대로 동작하지 않을 수 도 있습니다. 후자인 경우, 자신만의 위키를 $code를 $true로 변경하여 계속 시도 해보세요. (설정이 제대로 된 이후에 $code를 다시 $false로 변경하는 것을 잊지 마세요)

Please note, however, that it will not work on firewalled or private wikis. In the latter case, you can still try it out by making your wiki temporarily public by setting $wgGroupPermissions['*']['read'] to true. Remember to change it back to false once you are done.

그게 아니라, 수동으로 설정하려면 아래 과정을 수행하세요.

서버측 설정

잘 동작하는 파일 찾기

짧은 URL을 Apache에 설정하기 위한 방법들 중 권장하는 방법은 Apache 설정 파일들을 수정하는 것이지만, 이것은 서버 설정을 변경하기 위한 권한을 필요로 합니다. (역자 주: root 권한) 만약 공유된 호스트(역자 주: 웹호스팅 같은)에서 작업하려고 한다면, 아마 그걸 수정할 수는 없을 것이고, 그 대안으로 $hta1 파일을 사용해야 할겁니다. $hta2 파일을 사용하는 것은 효과적인 방법이 될 수는 없고 다수의 도메인을 함께 사용하려고 할 때 그렇게 많은 권한을 주지는 않습니다. 그럼에도 불구하고, 그것들만으로도 짧은 URL 설정을 하기엔 충분합니다. LiteSpeed 사용자들은 $hta3 방법을 사용하세요.

This requires that you have access to the server configuration. If you are on a shared host, you most likely don't and will need to use a .htaccess file instead. Using .htaccess files is less efficient and doesn't give you as much control when it comes to fancy setups with multiple domains but they are powerful enough to set up most short url configurations. LiteSpeed users should use the .htaccess method.

설정을 바꿀 수 있는 root 권한을 가지고 있는지 아닌지에 따라 .htaccess를 사용하거나 하지 않거나를 결정하여 아래 두 섹션중 하나를 따라하시면 됩니다.

Apache 설정 파일 찾기 (root 권한 보유)

관리자 설정을 변경할 수 있는 정확한 설정 파일은 많은 장소중 한곳에 있을겁니다.

대부분의 리눅스 배포본은 Apache를 설치할 때 sites-available/sites-enabled/ 폴더를 함께 설치합니다. 정확한 설정파일은 $code3에 들어있는 것들 중 위키를 설치할 때 설정했던 설정 파일입니다. 만약 아무것도 새로 만들지 않았고 위키를 설치할 때 기본 웹사이트 디렉터리인 $code4를 사용하였다면 $code5를 수정하면 됩니다.

The correct config file to edit is the one in /etc/apache2/sites-available/ where the configuration for your wiki has been setup. If you haven't set one up and are using the default /var/www for your wiki setup then you can edit /etc/apache2/sites-available/default.

Ubuntu 12.04와 12.10에서는 AllowOverride All는 기본적으로 비활성화 되어 있는데 활성화 시켜야 합니다.

It is disabled by default in Ubuntu 12.04 and Ubuntu 12.10.

자신이 활용중인 리눅스 배포본에 이러한 디렉터리가 없다면 Apache 설정파일을 직접 수정해야 합니다. 이 파일의 경로는 $code1입니다. 그게 $httpd1으로 명명되어 있다면, 혹은 $httpd2는 찾았는데, $apache가 없다면 수정해야될 파일은 $httpd3입니다.

This file should be at /etc/apache2/apache2.conf. Note that it used to be named httpd.conf, if you have a httpd.conf and no apache2.conf then httpd.conf is the one you want to edit.

Apache 설정이 어디에도 없다면 Apache를 설치한 시스템에서 설명서를 보고 Apache 설정파일이 어디에 있는지 찾아야 합니다.

Apache 설정 파일에 접근할 수 있는 권한이 없는 공유된 호스트를 사용하고 있다면, .htaccess 파일을 사용해야 할것입니다.

Apache 설정파일에 자신의 위키를 포함하는 VirtualHost 블록이 들어 있다면 거기에 rewrite 규칙을 작성할 장소가 있습니다. VirtualHost를 사용하고 있을 때 RewriteRule 설정은 상속되지 않으므로 이러한 옵션들을 전역 설정에 넣지 말아야 합니다.

RewriteRule config does not inherit so don't put these config options in the global config if you are using a 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 파일들이 서버 설정을 제어할 수 있도록 할지 말지를 제어합니다. Rewrite 룰이 전혀 동작하지 않는다면 Apache 설정파일에서 AllowOverride 설정을 수정해야 합니다. 또한 디렉토리에 Options FollowSymLinks또한 지정해야 합니다.

.htaccess 파일을 사용하려면 스크립트와 가상 경로를 모두 포함하는 경로에 수정하거나 생성해야 합니다. 보통 사이트의 최상위 디렉토리입니다. 예:

wgScript Example wgArticlePath Example .htaccess location
/w/index.php http://www.mediawiki.org/w/index.php?... /wiki/Page_title http://www.mediawiki.org/wiki/Manual:Short_URL /.htaccess
/w/index.php http://www.mediawiki.org/w/index.php?... /Page_title http://www.mediawiki.org/Manual:Short_URL /.htaccess
/mediawiki/index.php http://www.mediawiki.org/mediawiki/index.php?... /view/Article http://www.mediawiki.org/view/Manual:Short_URL /.htaccess
/mysite/mw/index.php http://www.mediawiki.org/mysite/mw/index.php?... /mysite/view/Page_title http://www.mediawiki.org/mysite/view/Manual:Short_URL /mysite/.htaccess

주 도메인에서 wiki의 메인 페이지로 리디렉션하려는 경우 (예 : http://example.org/ → http://example.org/wiki/Main_Page) 항상 최상위 레벨에서 .htaccess 파일을 설정해야합니다. (다른 디렉토리가 중첩 된 경우에도)

Rewrite 규칙 설정하기

Apache 문법을 간단히 살펴보면 이 섹션이 이해하기 어렵지 않지만, 이 내용은 Apache 설명서 전체를 대변하지는 않습니다.

RewriteCond TestString CondPattern
RewriteRule Pattern Substitution [flags]

RewriteCond 지시어는 그 뒤에 오는 RewriteRule이 적용되기 전에 true 여야하는 조건을 정의합니다. 하나 이상의 RewriteCond 지시어가 RewriteRule 지시문 앞에 올 수 있으며 RewriteRule 앞에 오는 모든 RewriteCond 지시문은 해당 규칙이 URI에 적용되기 전에 true 여야합니다. 아래 예제에서 TestString은 서버 변수에 대한 참조 형식을 취합니다. %{ NAME_OF_VARIABLE }. 많은 CondPatterns가 있지만, -f (TestString이 일반 파일 일 때 true)와 -d (TestString이 디렉토리 일 때 true)를 사용하며 앞에 !기호가 붙습니다.

RewriteRule 지시문은 httpd.conf 파일과 .htaccess 파일에서 모두 호출 할 수 있지만, 다시 쓰기 규칙이 .htaccess 파일에 나타나면 규칙에 따라 암시적인 디렉토리 별 컨텍스트가 규칙의 Pattern 에 영향을 주고, 현재 디렉토리를 기준으로 합니다. .htaccess 파일에서 패턴들은 완전한 URI에 상대적이지 않고, 원본 URI를 기준으로 합니다. .htaccess 파일의 경우 패턴은 URI 하위 문자열이 /로 시작하지 않기 때문에 전위 슬래쉬나 /로 시작하지 않아야 합니다. 아래 예제는 $L 플래그를 사용하며 즉시 재 작성 프로세스를 중지하고 더 이상 규칙을 적용하지 마십시오라는 의미입니다.


아래 예제가 동작하려면 Apache나 LiteSpeed 서버에서 mod_rewrite 모듈은 반드시 활성화되어야 합니다.
가상 호스트 설정을 사용하고 있는 경우, 셋팅들이 VirtualHost 안쪽에 위치하도록 만들어야 합니다.

Rewrite 엔진을 활성화 시키기 위해 설정파일에 작성할 첫번째 규칙은 아래와 같습니다.

RewriteEngine On

이제, 우리는 어떤 글에 접근하는 경로를 가상 경로로 만들기 위해서 가상 경로가 index.php를 가르키도록 만들겁니다. /wiki/w/index.php를 앞의 계획하기섹션에서 계획한 대로 바꿔 쓰십시오. (다르게 계획했다면)

RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]
이것을 커스터마이징하려고 결정했다면 ?title=$1나 유사한 것을 Rewrite 규칙에 절대 포함해선 안됩니다. 이러한 쿼리를 포함하는 것은 미디어 위키에 내장된 것들을 덮어쓸 위험이 있으며, Apache가 쿼리를 재작성하게 되어 위키에 버그를 생성시킬 수 있습니다.[1] 여기에서 목표는 가상 경로에 대한 접근을 /index.php 로 제어를 이동시키고 나서 미디어위키가 LocalSettings.php 설정 파일에 기반해 URL을 파싱하고 라우팅 시키도록 만드는 것입니다.

짧은 URL로서 루트 URL을 사용하려는 경우 위에 있는것 보단, 아래 규칙 샘플을 사용하셔야 합니다. (파일이나 디렉터리가 이미 존재하는경우 글로서 취급되지 않도록, 예를 들자면 "/index.php"나 "/images" 같은 것들...)

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, /mywiki/Article 처럼요.

가끔씩 위 예제는 동작하지 않을 수 있습니다. 아래 설정은 동작할겁니다. 그러나 이건 .htaccess에서 설정할 수는 없고, root 권한이 필요합니다.

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

부가적으로, 페이지 제목이 지정되지 않은 URL로 접근했을 때 네비게이션을 단순화하기 위해서 경로 자체로 접근하면 Main Page를 보여주는 규칙을 포함시킬 수 있습니다.

# /를 메인 페이지로 리다이렉션 시킵니다.
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

최종 결과는 아래처럼 작성될것입니다.

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

# Rewrite 엔진을 활성화
RewriteEngine On

# 위키 페이지로 접근하는 주소를 짧게 만듬
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]

# '/'를 메인 페이지로 리다이렉션
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

or, if you used the way with the "Alias" statement:

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

Alias /wiki /path/to/your/webroot/w/index.php
# Rewrite 엔진을 활성화
RewriteEngine On

# '/'를 메인 페이지로 리다이렉션
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]
위 예제에서 주어진 규칙들의 순서은 고정되므로 순서를 바꾸지 마세요. 그러니까, "위키 페이지로 접근하는 주소를 짧게 만듬"은 반드시 "'/'를 메인 페이지로 리다이렉션"보다 앞에 있어야 합니다.
설정에서 ^/?는 Apache가 정규표현식을 해석하는 방향이 달라지기 때문에 중요합니다. ^wiki/를 사용한다거나, ^/wiki/를 사용하는것 보다 /?처럼 ?를 사용하면 둘 다 포함하게 됩니다.
설정에서 %{DOCUMENT_ROOT}은 Apache가 경로를 혼돈하지 않게 하도록 만듭니다. 그러나 일부 잘못 설정된 호스트에서는 동작하지 않습니다. RewriteRules에서 404 혹은 403 문제를 겪는다면 %{DOCUMENT_ROOT} 부분을 제거하고 다시 시도해보세요.
SCRIPT_PATH가 물리적으로 다른 위치를 가르킨다면 (유닉스에서 "symlink(심볼릭 링크)", 윈도우즈에서 "shortcut(바로가기)", Mac OS X에서 "alias(별칭)") Apache가 그것들을 따라가도록 허용해줘야 합니다. RewriteEngine 위에 이걸 추가해볼 수 있습니다:
Options +FollowSymLinks
Alias 구문을 통해 웹서버가 경로를 스크립트 경로로 가르키게 되었다면 다음 핸들러에 전달할 요청을 전달하기 위해 PT 플래그를 추가했을 때에도 RewriteRule은 잘 동작할 것입니다. (방법: [L][PT,L]로 변경) - mod_alias가 요청을 올바르게 리다이렉션 시키려면 Stack Overflow 참고

LocalSettings.php

우리는 LocalSettings.php 설정 파일에 있는 몇가지 설정들을 수정해야 합니다.

## https://www.mediawiki.org/wiki/Manual:Short_URL
$wgScriptPath = "/w";        // 이 값은 반드시 이런 식으로 변경되어야 합니다.
$wgArticlePath = "/wiki/$1";

설정을 완료하고 나서 "리다이렉션 루프 탐지됨!"이라는 "내부 에러" 페이지를 보게 되었다면 mod_php를 제외하고 다른 뭔가를 사용중일지도 모릅니다. 그래서 이걸 명확히 짧은 주소를 활용할 때 LocalSettings.php에 추가하세요:

$wgUsePathInfo = true;

그래도 여전히 "내부 에러" 메시지를 보게 된다면 서버 로그 파일들을 확인해보세요. 아마도 mod_rewrite 모듈을 활성화시켜야 할겁니다.

See also

참고 자료