When you create a page in WordPress, it’s just an entry in a database table; there’s no actual file at that location. However I can create a file at that location myself and it will steal the page away from WordPress. I delete the file and it seamlessly goes back to the WordPress page.
I’m just curious about how this is achieved. Presumably some communication is happening between WordPress and Apache(?).
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Actually there is no communication happening between Apache and WordPress. The “magic” is happening in Apache mod_rewrite rules.
For a standard WordPress installation, you have the following rules in .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
Notice this line: RewriteRule . /index.php [L]
Here, we are telling Apache to internally redirect any URL request to /index.php.
Unless: this line: RewriteCond %{REQUEST_FILENAME} !-f becomes false. That means, with adding this RewriteCond with the above RewriteRule, we are telling Apache to send all requests to /index.php, but not if it’s an existing file.
Also, when this line: RewriteCond %{REQUEST_FILENAME} !-d becomes false. That means, with adding this RewriteCond with the above RewriteRule, we are telling Apache to send all request to /index.php, but not if it’s an existing directory.
So in the end, unless it’s an existing file or an existing directory, Apache is internally sending all other requests to /index.php.
So as you see, no communication is happening between Apache & WordPress. Apache is deciding everything itself and we are telling it to do so using RewriteRule and RewriteCond directives.
Read more about mod_rewrite HERE.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0