質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

解決済

サブディレクトリのリダイレクト設定が一部正しく機能しない

uzushio
uzushio

総合スコア15

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

1回答

0評価

0クリップ

10939閲覧

投稿2019/02/28 02:29

前提・実現したいこと

『製品紹介サイト』と『製品販売サイト』をwordpressで作成中です。
同ドメイン内の2つのサブディレクトリ(wp、shop)それぞれにwordpressを入れ、
製品紹介サイトはルートディレクトリで表示されるように設定し、
下記のようなURLの2つのサイトができました。
https://sample.com
https://sample.com/shop/

この2つのサイトに.htaccessによるリダイレクトをかけるため、
『ルートディレクトリ』『/wp/ディレクトリ』『/shop/ディレクトリ』
の3箇所に.htaccessを置き、3箇所とも下記のルールでリダイレクトされるよう記述してみました。
・httpsに統一
・wwwなしに統一
・index.htmlとindex.phpにアクセスされたら、それぞれを省略したURLを表示する

しかし、テストしてみたところ、一部成功・一部失敗している状態です。

発生している問題・エラーメッセージ

『ルートディレクトリ』『/wp/ディレクトリ』は希望通りのリダイレクトが成功しているのですが、
『/shop/ディレクトリ』のみ一部条件でリダイレクトに失敗してしまいます。

失敗の条件をまとめると下記のようでした。

  • /shop/index.htmlにアクセスすると、https化・wwwなし化・index省略すべてが失敗する

 (/shop/index.phpへのアクセスは、https化・wwwなし化・index省略すべてが成功する)

 (wwwありの/shop/wp-admin/などへのアクセスは、https化・wwwなし化どちらも成功)
(ただし、/shop/wp-admin/index.phpにアクセスすると、/wp/wp-admin/に飛んでしまう)

該当のソースコード

ルートディレクトリの.htaccess

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteCond %{HTTP_HOST} ^www.sample.com$ RewriteRule ^(.*)$ https://sample.com/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} index.(html|php) RewriteRule ^index.(html|php)$ / [R=301,L] RewriteRule ^(.*)/index.(html|php)$ /$1/ [R=301,L] </IfModule>

/shop/ディレクトリの.htaccess

<IfModule mod_rewrite.c> RewriteEngine On RewriteOptions Inherit RewriteBase /shop/ RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteCond %{HTTP_HOST} ^www.sample.com$ RewriteRule ^(.*)$ https://sample.com/shop/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} index.(html|php) RewriteRule ^(.*)/index.(html|php)$ /$1/ [R=301,L] </IfModule>

参考までに、/wp/ディレクトリの.htaccess

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /wp/ RewriteRule ^index.html?$ / [R=301,L] RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wp/index.php [L] RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] </IfModule>

試したこと

Rewriteについて検索しながら細々と記述を変えてはテストしているのですが、
時々500エラーを出してしまいつつ、失敗が改善されない状態が続いています。

補足情報

ルートディレクトリの.htaccessには、アクセス制限の記述も入れています。
/wp/ディレクトリの.htaccessには、wordpressのログインURLにアクセスできるIPを制限する記述も入れています。


長くなりましたが、質問内容は以上となります。
改善策についてアドバイスをいただければ幸いです。
どうぞよろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

CHERRY

2019/02/28 03:41

shop の .htaccess で、 `RewriteOptions Inherit` が設定されているのはなぜでしょうか?
uzushio

2019/02/28 03:57

コメントありがとうございます! RewriteOptions Inheritは、対処法を検索する中で「親ディレクトリでのURL書き換えを下層ディレクトリに継承するための設定」として見つけ、よくわからないまま効果を期待して入れてみたものの、特に効果は感じられませんでした。まずはこちらを削除するべきでしょうか。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。