ドメインのルートでWordPressインスタンスが実行されています。
1つのWordPressページがwww.example.com/product/
にあります。 www.example.com/product/documentation/
や他のHTMLファイルがあるindex.html
に訪問者が行くことができるように、私はその下のパスにいくつかの静的なHTMLファイルを配置しました。
これで静的HTMLファイルに正常にアクセスできますが、WordPressサイトにアクセスすると(つまりwww.example.com/product/
)、403 Forbiddenエラーが発生します。
WordPressページへのアクセスを維持しながら、そのURLで静的HTMLファイルを利用できるようにするにはどうすればよいですか。
これが私の.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
この質問に対する回答が既にあった場合は申し訳ありませんが、WordPressのコンテンツではなく静的なコンテンツの表示に関する問題についての質問がありました。
(仮想)WordPress URLと同じ物理ディレクトリを作成することで、競合が発生しました。 URLはWPを介してルーティングする必要がありますが、デフォルトのフロントコントローラ(上記の.htaccess
コード)では、物理ディレクトリの書き換えは特に除外されています。
index.html
サブディレクトリにディレクトリインデックスドキュメント(index.php
または/product
など)がないため、403 Forbiddenエラーが発生します。 (あなたが不思議に思っていたのであれば、どちらも必要としません。)
サイトによっては、フロントコントローラのディレクトリチェックを単に削除することもできます。例えば(コメントアウトしたばかり):
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
これは、any物理ディレクトリ(単なるベアディレクトリ))へのリクエストにアクセスできず、WPを介して渡されることを意味しますが、これはおそらくあなたの/product/documentation/
URLと衝突するでしょう。次のように=の前に上記のディレクティブ:
RewriteRule ^product/documentation/$ /product/documentation/index.html [L]
(それ以外の場合、URLがWPに存在しない物理ディレクトリが要求された場合はWordPress 404が表示されます。)
あるいは、この1つのサブディレクトリに対して明示的に例外を作成し、WPを介して手動でルーティングすることもできます(つまり、index.php
に書き換えます)。たとえば、=の前既存のフロントコントローラ(ファイルの先頭))に次の行を追加します。
RewriteRule ^product/?$ /index.php [L]