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はfalseになります。つまり、これRewriteCondを上記に追加すると、RewriteRuleApacheにすべてのリクエストを送信するように指示しますが/index.php既存のファイルの場合は送信しません

また、この行:RewriteCond %{REQUEST_FILENAME} !-dがfalseになったとき。つまり、これRewriteCondを上記に追加すると、RewriteRuleApacheにすべてのリクエストを送信するように指示します/index.php、既存のディレクトリの場合は送信しません

そのため、最終的に、既存のファイルまたは既存のディレクトリでない限り、Apacheは他のすべてのリクエストを内部的に送信します/index.php

ご覧のとおり、ApacheとWordPressの間で通信は行われていません。Apacheはそれ自体をすべて決定してRewriteRuleおり、RewriteCondディレクティブとディレクティブを使用してそうするように指示しています。

mod_rewriteこちらをご覧ください。


3
これは素晴らしい。私は完全に理解しています。デフォルトの.htaccessファイルを何度も見てきましたが、分析することはありませんでした。ありがとうございました!
マット

これは、フロントコントローラーと呼ばれるデザインパターンです。存在しないすべてのURLをindex.phpにリダイレクトすることに注意してください。これは、functions.phpファイルへのフルパスを入力すると、フロントコントローラーが機能せず、ウェブサイトがfunctions.phpを提供することを意味します。あなたが頻繁にWordPressのプラグインやテーマファイルが起動し表示されます理由はここにありif ( !defined(‘ABSPATH’)) exit;
Sjors Ottjes

はい、私はプラグインでそれを見ましたが、その目的を理解していませんでした。したがって、!defined(‘ABSPATH’)trueと評価された場合、WordPress以外がスクリプトにアクセスしようとしていることを意味します(wp-config.phpでABSPATHが定義されているため)。したがって、そのリクエストは無視する必要があります。あれは正しいですか?
マット

@mattそうですね。「WordPress以外の何か」とは言いませんが。ABSPATH他のPHPスクリプトでも定義できるため、独自のサーバーで他のスクリプトを許可します。許可されないのは、サーバーの外部(ブラウザーなど)からそのファイルに直接アクセスすることです。そのファイルに直接アクセスすることにより、ユーザーはを定義することができませんABSPATH
ファヤズ

これは知るのは本当に素晴らしいことです。私は常にセキュリティを心配しており、すぐにこれを利用することができます。ありがとうございました!
マット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.