カスタムパーマリンクを使用して .htaccess ファイルを使用せずに WordPress をセットアップしますか?
-
16-10-2019 - |
質問
Apache 構成を自分で設定することを好むため、.htaccess ファイルを無効にすることを強く好むクライアントがいます。ただし、依然として SEO に適した URL が必要です。
.htaccess ファイルを使用せずにカスタム パーマリンクを作成する方法はありますか?これまでの私の調査では、これは不可能であることが示されているようですが、おそらく優秀な開発者の一人は、一見不可能に見えることがどのようにして可能になるかを知っています。前もって感謝します!
解決
こんにちは @マイク・リー:
質問に答えるには、すべてがどのように機能するかを理解することが役立ちます。
Apache はファイルとディレクトリに一致する URL を提供します
Apache は、URL によって明示的に一致するファイルを提供するか、 index.php
ディレクトリが明示的に一致する場合、ディレクトリ内で見つかります。
ただし、Apache は正規表現で一致した URL を提供できます。 mod_rewrite
実際のディレクトリがない場所 (WordPress やプリティパーマリンクの場合) の URL を Apache に照合させたい場合は、URL を別の方法で処理する方法を Apache に伝える何らかの方法が必要です。そしてまさにそれが mod_rewrite
を可能にするように設計されました。これにより、サーバー管理者は正規表現を使用して URL を照合するためのルールを設定できるようになります。これらのルールは、結果を他の URL にルーティングします。多くの場合、実際の URL も含まれます。 .PHP
ファイル、場合によっては URL パラメータが渡されることもあります。最終的に、ルールは実際のファイルがロードされることを指定します。
そして mod_rewrite
いずれかで構成されています .htaccess
または httpd.conf
設定するには mod_rewrite
内側でしかできない .htaccess
またはその範囲内で httpd.conf
ファイル、またはそれに含まれるファイルの 1 つ (潜在的に) httpd-vhosts.conf
. 。実際のところ、クライアントが Apache を制御するスキルを持っている場合、彼らがこのことをまだ知らないことに私は驚きます。
WordPress は常に同じシンプルなものを使用します .htaccess
ファイル
WordPress の動作に移ります。パーマリンクを設定すると、WordPress は次の内容を .htaccess
ファイルが書き込み可能であると仮定します (この最初の例では、Web サイトがルートから提供されていると仮定しています。):
# 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
警告:WordPress フロントページディレクトリがルートではない場合
サイトが代わりに提供されている場合 /blog
そうして .htaccess
書き込まれるファイルは次のようになります。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
WordPress はファイル/ディレクトリに一致しない URL をすべて次のアドレスにルーティングします index.php
ご覧のとおり、WordPress が使用するのは .htaccess
マップすることです どれでも ドメインへの URL /index.php
(または /blog/index.php
2番目の例では) を除外する URL が実際のファイルと一致する場合 (例: .jpg
/.gif
/.png
画像、 .css
スタイルシート、 .js
スクリプトなど)、または実際のディレクトリと一致する場合(私の知る限り、これは標準の WordPress インストールには関係ありません)。
で PHP
WordPress の解析 $_SERVER['REQUEST_URI']
何をロードするかを決定するには
その内部 PHP
コードWordPressは値を取得します $_SERVER['REQUEST_URI']
完全な URL リクエストが含まれています ない ドメインとスキーム (すなわち、スキームは http
または https
) そして値を解析して、どの URL がリクエストされたか、つまりどのページをロードする必要があるかを判断します。
バイパス .htaccess
?Apache に仮想 URL をロードさせます (でも頑張ってください!)
したがって、何らかの方法でバイパスしたい場合は、 .htaccess
あなたの仕事は、Apache に任意の URL に応答させてから、WordPress をロードして設定することです。 $_SERVER['REQUEST_URI']
URL パスとパラメーターになります。IOWは良い意味でなりすましをしています。そうは言っても、私はそれを行うためのそれほど複雑ではない方法を知らないかどうか知っています。
埋め込み /index.php/
(多分?!?)
*Chris_O* が先頭に付けることについては正しいにもかかわらず、 /index.php/
あなたの URL を見るたびにうんざりします。すべての URL に 10 文字が追加されるため、URL は長くなり、検索エンジンにとって意味が薄れますが、さらに悪いことに URL は共有されにくくなり、ユーザーにとっては不可解に見えます。ごめんなさい、クリス、良い意味で言ったのはわかっていますが、 うーん!
URLごとに実ディレクトリを作成する(たぶん?)
Apache を使わずに適切なパーマリンクを取得する 1 つの方法は、必要な URL ごとに実際のディレクトリを生成し、そのディレクトリを保存するスクリプトを作成することです。 index.php
そこにWordPressがロードされます。もちろん、これはわずかな利益に対して多大な労力を要しますし、サーバーに書き込みアクセスが必要になりますが、これは、 .htaccess
ファイル。
認めたくないのですが、これは私が 1998 年頃にやったことです。 .ASP
-ベースのウェブサイトの場合 IIS
URL の書き換えはサポートされていませんでした (そして今でも本物の PITA です!) それは醜いハッキングで、維持するのが面倒で、私は大嫌いでしたが、URL はユーザーにとっても SEO にとっても確かに素晴らしいものでした。
最良の解決策?書き換えルールを追加する httpd.conf
おそらく最善の解決策に戻り、 @サイモン・ブラウン 実際にそれを勧めました。書き換えルールを追加します httpd.conf
または次のようなインクルード ファイルの 1 つ httpd-vhosts.conf
(これが、私の Mac のローカルホストで Apache が設定される方法です。) 次のディレクティブを追加して、サイトのディレクトリと一致するようにディレクトリを変更してください。
<Directory "/home/example_user/public_html/">
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>
ボーナス!ロックダウンではパフォーマンスも低下する
この最後のオプションでは、あらゆる問題を排除する必要があります。 .htaccess
そしてコントロールを彼らの手に戻します。さらに良いことに、パフォーマンスがわずかに向上しています。 httpd.conf
Apache の起動時に 1 回だけロードされますが、 .htaccess
ファイルは URL リクエストごとにロードされ、解析されます。
追伸もう 1 つ考慮すべきことは、 フロントエンド Apache と次のようなキャッシュ サーバー Nginx になりつつあると私は信じています トラフィックの多い WordPress サイトのベスト プラクティス 本当にパフォーマンスが必要です。Apache の URL 書き換えに Nginx を使用している人はほとんどいないと思うので、グリーンフィールドの調整が必要になるかもしれませんが、その方向に興味がある場合は、ここにいくつかのリンクがあります。
- WordPress Nginx プロキシ キャッシュ インテグレーター
- Wordpress + Apache で Nginx をキャッシュ プロキシとして使用する
- WordPress のフロントエンド プロキシ キャッシュとしての Nginx
- WordPress、Nginx、WP Super Cache
- Nginx と WordPress MU (wp-super-cache あり)
- Nginx と WP Super Cache を使用して WordPress を高速化する方法
- W3 Total Cache プラグインの Nginx 書き換えルール
- WordPress 用に Nginx を調整する – Pretty URL と WP Super Cache
他のヒント
mod_rewriteのないパーマリンク
.htaccessファイルがないか、httpd.confファイルを変更しないと、できる最善のことはpathinfo permalinksです。 pathinfoパーマリンクは、index.phpで始まることを除いて、かなりのパーマリンクと同じです。
PathInfo Permalinksを使用するには、カスタムパーマリンク構造の開始時にindex.php/をput index.php/
/index.php/%postname%/
を参照してください コーデックスの記事 詳細については。
悪い時代に戻って、WordPressは、パーマリンク構造を変更するたびに新しい構成ファイルを記述する必要がありました。現代のセットアップでは、書き直しは不変です。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
存在しないファイルのすべての要求(つまり、ファイルシステム上のファイルと一致しないカスタムパーマリンクパス)がindex.phpを通信し、 $_SERVER['REQUEST_URI']
実際に要求されたものをPHPに伝えます。クライアントは、httpd.confまたは.htaccessで書き換えルールを設定できます。パーマリンク構造を調整するときに変更する必要はありません。
一部のプラグインは、.htaccess自体を変更しようとするか、ファイルを変更するように依頼します。このソリューションはすべての人にとってではないかもしれませんが、検討する価値があります。