web-dev-qa-db-ja.com

ワードプレスのインストールと同じレベルのフォルダにアクセスできない

次のような構造になっています

www/
  .htaccess
  /website1
  /website2
  /uploads/foo.pdf
  /websiteWP
    .htaccess

ルート内の.htacces(www/.htaccess)

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{HTTP_Host} ^(www.)?foo.com$

RewriteCond %{REQUEST_URI} !^/website1/
RewriteCond %{REQUEST_URI} !^/website2/
RewriteCond %{REQUEST_URI} !^/uploads/
RewriteCond %{REQUEST_URI} !^/websiteWP/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /websiteWP/$1

RewriteCond %{HTTP_Host} ^(www.)?foo.com$
RewriteRule ^(/)?$ websiteWP/index.php [L] 
</IfModule>

ワードプレスインストールの.htacces(www/websiteWP/.htaccess)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Wordpressの内部で、リンク https://www.foo.com/uploads/some-pdf.pdf をクリックすると、読み込みページが無限に表示されます。コンテンツを読み込もうとしている(この反応はテーマによるものです。他のユーザーは404を使用できると思います)、または半分のワードプレスと半分の "埋め込まれた"リモートページを組み合わせることがあります。

しかし、Webサイトの外側からPDFにアクセスすると(検索ボックスに貼り付けると)うまくいきます。

注:

WordpressのURL: https://www.foo.com/websiteWP

ウェブサイトのURL: https://www.foo.com

.htaccessの失敗を見つけることができません。

Stackoverflowおよびwordpress stackexchangeで利用可能なすべてのスレッドをすでに確認しています。

1
Qu4k3

あなたがあなたの投稿した.htaccessファイルから、あなたがあなたのWordPressインストールの外で(/websiteWPサブディレクトリの中で)ファイル/フォルダーにアクセスできない理由は明らかではありません。実際、物理ファイルにアクセスするために特定の例外を追加する必要はありません。これらのディレクティブは物理ファイルには適用されるべきではないからです。

しかし、あなたの.htaccessファイルの設定が間違っています...

WordPressのインストールが/websiteWPディレクトリにある場合、(あなたのWordPressインストールのルートにある)/websiteWP/.htaccessファイルはすべてのリクエストを/index.phpにルーティングしているので間違っています - これはドキュメントルートのindex.phpファイルです(これは親ディレクトリです)同じディレクトリにあるべきWordPressフロントコントローラではありません。 /websiteWP/index.php).

しかし、私は/index.php(ドキュメントルートにあります)が存在しないと仮定します(さもなければあなたのWordPressサイトは機能しないでしょう)。ルートの.htaccessファイルの.htaccessディレクティブは、リクエストをWordPressフロントコントローラーの/websiteWP/index.phpに書き換えます。これは余分な作業であり、不要です。

/websiteWP/.htaccessファイルを次のように変更してください。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>

RewriteBaseディレクティブを削除し、RewriteRule置換のスラッシュ接頭部を削除し、/index.php(root-relative)をindex.php(relative)に変更しました。

その場合、ルートの.htaccessファイルはまったく必要ありません。

0
MrWhite