カスタムパーマリンクを使用して .htaccess ファイルを使用せずに WordPress をセットアップしますか?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/994

  •  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 を使用している人はほとんどいないと思うので、グリーンフィールドの調整が必要になるかもしれませんが、その方向に興味がある場合は、ここにいくつかのリンクがあります。

他のヒント

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自体を変更しようとするか、ファイルを変更するように依頼します。このソリューションはすべての人にとってではないかもしれませんが、検討する価値があります。

ライセンス: CC-BY-SA帰属
所属していません wordpress.stackexchange
scroll top