WordPress는 Apache가 알고있는 URL을 어떻게 작성합니까?


17

WordPress에서 페이지를 만들면 데이터베이스 테이블의 항목 일뿐입니다. 해당 위치에 실제 파일이 없습니다. 그러나 그 위치에서 파일을 직접 만들 수 있으며 WordPress에서 페이지를 훔칩니다. 파일을 삭제하면 WordPress 페이지로 원활하게 돌아갑니다.

이것이 어떻게 달성되는지 궁금합니다. 아마도 WordPress와 Apache (?)간에 약간의 통신이 진행되고 있습니다.

답변:


27

실제로 Apache와 WordPress간에 통신이 이루어지지 않습니다. "매직"은 Apache mod_rewrite규칙 에서 발생 합니다.

표준 WordPress 설치의 경우 다음 규칙이 있습니다 .htaccess.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

이 줄에 주목하십시오 : RewriteRule . /index.php [L] 여기서, 우리는 Apache에게 URL 요청을 내부적으로 리디렉션하도록 지시하고 /index.php있습니다.

그렇지 않으면 : 이 줄 :RewriteCond %{REQUEST_FILENAME} !-f거짓이됩니다. 즉,RewriteCond위와 함께이것을 추가하면RewriteRuleApache가 모든 요청을로 보내도록 요청/index.php하지만 기존 파일이 아닌 경우에 요청 합니다 .

또한 이 줄이 :RewriteCond %{REQUEST_FILENAME} !-d거짓이됩니다. 즉,RewriteCond위와 함께이것을 추가하면RewriteRuleApache가 모든 요청을로 보내도록 요청/index.php하지만 기존 디렉토리 인 경우는 아닙니다 .

따라서 기존 파일 또는 기존 디렉토리가 아닌 경우 Apache는 내부적으로 다른 모든 요청을에 보냅니다 /index.php.

보시다시피 Apache와 WordPress간에 통신이 이루어지지 않습니다. 아파치는 모든 것을 스스로 결정하고 있으며 우리는 그것을 사용 RewriteRule하고 RewriteCond지시합니다.

mod_rewrite여기 에 대해 자세히 알아보십시오 .


3
대단하다. 완벽하게 이해합니다. 나는 기본 .htaccess 파일을 여러 번 보았고 그것을 분석하려고 결코 신경 쓰지 않았다. 감사합니다!
Matt

이것은 전면 컨트롤러라는 디자인 패턴입니다. 존재하지 않는 모든 URL을 index.php로 리디렉션합니다. 이것은 functions.php 파일의 전체 경로를 입력하면 프론트 컨트롤러가 작동하지 않고 웹 사이트가 functions.php를 제공한다는 것을 의미합니다. 그렇기 때문에 워드 프레스 플러그인과 테마 파일이 다음과 같이 자주 시작됩니다.if ( !defined(‘ABSPATH’)) exit;
Sjors Ottjes

예, 플러그인에서 보았지만 그 목적을 이해하지 못했습니다. 따라서 !defined(‘ABSPATH’)true로 평가 되면 워드 프레스 이외의 스크립트가 스크립트에 액세스하려고 시도한다는 것을 의미합니다 (ABSPATH가 wp-config.php에 정의되어 있기 때문). 따라서 해당 요청을 무시해야합니다. 그 맞습니까?
Matt

@ matt 맞습니다. "WordPress 이외의 것"이라고 말하지는 않았지만. ABSPATH다른 PHP 스크립트에서도 정의 할 수 있으므로 자신의 서버에서 다른 스크립트를 허용합니다. 허용되지 않는 것은 서버 외부 (예 : 브라우저)에서 해당 파일에 직접 액세스하는 것입니다. 해당 파일에 직접 액세스하면 사용자는을 (를) 정의 할 수 없습니다 ABSPATH.
Fayaz

이것은 정말 대단하다. 나는 항상 보안에 대해 걱정하고 있으며 이것을 즉시 활용할 수 있습니다. 감사합니다!
Matt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.