web-dev-qa-db-ja.com

Wordpressマルチサイトhtaccess

私はWordpressをマルチサイトとして設定し、手順の一部として、.htaccessファイルを更新して置き換えるよう指示しました。

Wordpressは私にhtaccessをこれで置き換えるように指示しました:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

しかしながら、これはプラグインのいくつかのjqueryが壊れる原因となりました。

私はそれが役に立つかもしれないと思ったが、誰かがこれらの各行が何をするのかについて何らかの洞察を提供するのを手伝ってくれるだろうか?

特にこの行:

RewriteRule ^(.*\.php)$ $1 [L]

そのため、この行を削除しても、プラグインは問題なく動作します。

前もって感謝します :)

2
Cody New

私は、その行がサブドメインを使ったマルチサイトインストールにも推奨される理由について詳細を探していました。私は実際にこれらの両方がサブドメインのインストールに関連しているかどうか質問します。

RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]

サブディレクトリのインストールでは、要求からサブディレクトリ名を削除して、次のようにルールが若干異なります。

RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]

エラーログにリダイレクトループが見られますが、置換テキストは元のテキストと同じであるため、これらのルールの最初のバージョンが原因です。 mod_rewriteのバージョンによっては、元のテキストと新しいテキストが同じであることが検出され、結果の再挿入がスキップされるという証拠がいくつか見つかりました。 (この時点で私が読んでいる多くのリンクのうちどれがわからない。)

URIをオリジナルと同一に書き換えてリンクを書き換えエンジンに再挿入することには意味がありません。ルールを削除すると、リダイレクト制限を超えたときに500サーバーエラーで終了するリダイレクトループではなく、期待される404ページが表示されます。

別に注意してください、私は提案されたサブディレクトリのバージョンも壊れていると思います。サブディレクトリ部分に?を使用しているため、no-such-file.phpのような入力URLでループします。サブディレクトリ部分でのマッチングは、ゼロコピーを許容するべきではないので、規則はおそらく以下のようになるはずです。

 RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
 RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]

ここでも同様の結論が見つかります。 https://wordpress.stackexchange.com/a/73185/27576

3
KenB

RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
http://yourdomain.ext/wp-adminhttp:// yourdomainにリダイレクトします.ext/wp-admin /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
条件付き論理、要求されたファイル名が not 既存のファイル(-f)またはディレクトリ(-d)であるか確認).

RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
このファイルが存在するかどうかにかかわらず、wp-content.extwp-admin.ext、およびwp-includes.extをファイル自体にリダイレクトします。

RewriteRule ^(.*\.php)$ $1 [L]
ファイルが存在するかどうかにかかわらず、任意の.phpファイルをそのファイルにリダイレクトします。

RewriteRule . index.php [L]
すべてをindex.phpにリダイレクトします。

基本的に、.htaccessは、要求されたすべてのファイルをその特定のファイルにリダイレクトし、すべてのディレクトリをindex.phpにリダイレクトします。

書き換えエンジンの仕組みの詳細については、 mod_rewriteの詳細なドキュメント をお読みください。

2
Mike Madern