web-dev-qa-db-ja.com

WordPressのマルチサイト.htaccessにより古い* .php URLで500エラーが発生する

新しいマルチサイトWordPressインストールをセットアップしました。 Googleが古いURL(拡張子は.php)をまだクロールしていることを除けば、すべてがうまく機能します。

これらのURLには500エラーが表示されていますが、これはhtaccessの問題によるものと思われます。つまり、これらのURLはWordPressにヒットしていません。 (私は現在標準のWordPressマルチサイトhtaccessコードを使用しています。)

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

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

サイトの.htaccessファイルに、それらが含まれていて、サーバー上に見つからないファイルの拡張子.phpを削除するように書き換える必要があります(つまり、wp-login.phpなどのWordPressコアファイルを除外する)

このコードを使用して、拡張子.phpを削除しました。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ / [L,QSA]
</IfModule>

これにより500エラーが解決され、当初意図していたようにwp-redirectプラグインを使用して古いサイトのリダイレクトを設定できましたが、サブフォルダーマルチサイトでスタイルや画像をロードする際に問題が発生します。改善する必要があります。

1
benedict_w

.htaccessファイルの冒頭で次のようなことを試してください。

Options -MultiViews

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+)\.php$ /$1 [R=302,L]

上記は、物理ファイルにマップされていない.phpで終わるすべてのURLをリダイレクトし、リダイレクトの.php拡張子を削除します。

これらの要求(.php拡張子付き)は、そもそも500エラーを引き起こすべきではありませんが?上記のリダイレクトがこれを解決する場合、500エラーの引き金を引いているのはWordPress自体であることを意味しているように思われますか?


このコードを使用して、拡張子.phpを削除しました。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ / [L,QSA]
</IfModule>

これは500エラーを解決しました...

このコードは修正するよりも500エラーを引き起こす可能性が高いですか?これは「.php拡張子を削除する」のではなく、単にすべてのURLをドキュメントルートにルーティングするだけで、mod_dirがその要求をindex.phpにルーティングするようにします。

0
MrWhite