WordPress는 Apache가 알고있는 URL을 어떻게 작성합니까? 테이블의 항목 일뿐입니다. 해당 위치에 실제

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

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



답변

실제로 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여기 에 대해 자세히 알아보십시오 .