ドキュメントルートの設定
Drupalをインストールすると /htdocs/project-name/web がドキュメントルートになります。
Xserverのサブドメインのデフォルトのドキュメントルート
- hooked-on01.com/public_html/drupal.hooked-on01.com/
Drupalのインストールディレクトリ
- hooked-on01.com/public_html/drupal.hooked-on01.com/recommended-project/
DrupalのプライマリドメインのURL表示
- drupal.hooked-on01.com/recommended-project/web
内部リンクのURL表示
- drupal.hooked-on01.com/recommended-project/web/drupal/rearn-01
URL表示の変更を行いURL表示から
- /recommended-project/web
の表示を行わないように設定を行います。
Apache
ドキュメントルートの設定はApacheで行いますが、Xserverビジネススタンダードは共有サーバーの為Apacheの設定を許可されていません。
管理画面のドキュメントルート設定
Xserverビジネススタンダードの管理画面にサブドメインのドキュメントルート設定があります。
Xserverビジネススタンダードでサブドメインを取得した場合のドキュメントルートの設定は2択となっています。この設定もサブドメイン取得時の選択のみになっています。
- /hooked-on01.com/public_html/(サブドメイン名).hooked-on01.com/
- /hooked-on01.com/public_html/(サブドメイン名)/
ドキュメントルートの設定が以下のように出来れば解決します。
/hooked-on01.com/public_html/(サブドメイン名).hooked-on01.com/project-name/web
しかしこのような設定は出来ません。
.htaccess
Apacheとドキュメントルートの設定ができないので、htaccessの設定を行います。
目的
URL表示をプライマリドメインの表示にします。
- drupal.hooked-on01.com/recommended-project/web
- drupal.hooked-on01.com / となるように設定
内部リンクのURL表示もプライマリドメインの表示にします。
- drupal.hooked-on01.com/recommended-project/web/drupal/rearn-01
- drupal.hooked-on01.com/drupal/rearn-01 / となるように設定
実際は日本語をデフォルトにしていますので表示は以下のようになります。
- drupal.hooked-on01.com/ja/recommended-project/web
- drupal.hooked-on01.com/ja / となるように設定
- drupal.hooked-on01.com/ja/recommended-project/web/drupal/rearn-01
- drupal.hooked-on01.com/ja/drupal/rearn-01 / となるように設定
仮設定
過去の記事でまとめていますが、drupal.hooked-on01.comにアクセスした場合、応急的にdrupal.hooked-on01.com/ja/recommended-project/web/が表示されるよう.htaccsessの設定を行なっています。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# すべてのリクエストを /recommended-project/web に転送
RewriteCond %{REQUEST_URI} !^/recommended-project/web/
RewriteRule ^(.*)$ /recommended-project/web/$1 [L]
# /recommended-project/web を / にリダイレクト
RewriteCond %{REQUEST_URI} ^/recommended-project/web/?$
RewriteRule ^ / [R=301,L]
# http:// から https:// にリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
この設定は応急的に行なった.htaccessの設定であまり良い設定をしていません。
- すべてのリクエストを /recommended-project/web に転送
- /recommended-project/web を / にリダイレクト
- http:// から https:// にリダイレクト
/でDrupalのページを表示させ、httpをhttpsにリダイレクトする設定で、/ 表示に関しての設定はループ的な設定を行なっています。
現在の仮設定のURL表示 drupal.hooked-on01.com/ja/recommended-project/web/を drupal.hooked-on01.com/jaと表示させる為に.htaccessの設定を変更します。
.htaccessの設定
今回以下の設定を行います。
- /を/topにリダイレクト
- /recommended-project/web を完全に隠し、ルートとして扱う設定
- https://drupal.hooked-on01.com/recommended-project/web を https://drupal.hooked-on01.com にリダイレクト
- http:// を https:// にリダイレクト
.htaccessに以下の記述をします。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# /を/topにリダイレクト
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^ /top [R=301,L]
# /recommended-project/web を完全に隠し、ルートとして扱う設定
RewriteCond %{REQUEST_URI} !^/recommended-project/web/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /recommended-project/web/$1 [L]
# https://drupal.hooked-on01.com/recommended-project/web を https://drupal.hooked-on01.com にリダイレクト
RewriteCond %{REQUEST_URI} ^/recommended-project/web/?$
RewriteRule ^ / [R=301,L]
# http:// を https:// にリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
settings.phpに以下の記述をします。
$settings['trusted_host_patterns'] = [
'^drupal\.hooked-on01\.com$',
];
$settings['base_url'] = 'https://drupal.hooked-on01.com';
リダイレクト設定の完了
以上の設定をする事でURLの表示が
https://drupal.hooked-on01.com/recommended-project/web
>
https://drupal.hooked-on01.com/
になります。
今回の設定の問題点
今回の設定で drupal.hooked-on01.com/recommended-project にインストールしたDrupalのプロジェクトのURL表示を drupal.hooked-on01.com として表示出来るようになりましたが、一点問題が生じています。
DrupalのAdminコンソールに関わるリダイレクトでエラーが出てしまいます。
例 ログイン > 管理画面がリダイレクト表示されますが、ここでエラーが出てしまいます。
- /adminで再度ブラウザを読み込むとログイン出来ます。
例 記事を保存すると、記事のエイリアスにリダイレクトがかかりますが、ここでエラーが出てしまいます。
- ブラウザのURL表示末尾にカーソルを移動(URLを入力した状態)にして再読み込みすると記事のエイリアスが表示され保存完了の画面が表示されます。
表示されるリダイレクトのエラー
- Redirects to external URLs are not allowed by default, use \Drupal\Core\Routing\TrustedRedirectResponse for it.
このエラーの原因は
- 外部 URL へのリダイレクトを意図的に制限することで、オープンリダイレクト攻撃を防ぐ Drupal のセキュリティ機能です。
このエラーが出てしまっている原因が
プライマリー
- hooked-on01.com/public_html/drupal.hooked-on01.com/
インストール先
- hooked-on01.com/public_html/drupal.hooked-on01.com/recommended-project/
hooked-on01.com/public_html/drupal.hooked-on01.com/をDrupalプロジェクト外部として扱っておりhooked-on01.com/public_html/drupal.hooked-on01.com/recommended-project/外へのリダイレクトに対してDrupalがセキュリティ制限をかけてしまっています。
drupal.hooked-on01.com/recommended-project/admin/がdrupal.hooked-on01.com/admin/にリダイレクトされてしまう為に出ているエラーとなります。
外部へのアクセスを許可する設定をする事で回避出来そうなので、TrustedRedirectResponseなどいくつかの設定を試みましたが、現状エラーを回避できていません。
共用サーバーであるXserverビジネススタンダードの機能面での制約の中で無理やりDrupalのインストールを行なった上での運営となっていることが理由となっています。
- サブドメイン直下のディレクトリにDrupalプロジェクトディレクトリを設置
- Apacheの設定は不可
- ドキュメントルートの設定は不可
- .htaccessの設定でURL表示を設定
Drupalの管理画面のURLがリダイレクト設定によりDrupalプロジェクト外部にリダイレクトされていることでセキュリティエラーを出してしまっています。
今回のエラーは当Webサイトの設置が仮設的な意味合いを持っておりイレギュラーな設定を行なっている事から出たエラーですので、他の方が遭遇する事はないと考えています。
XserverビジネススタンダードにDrupalをインストールする事はXserverも推奨しておらずXserverでDrupalを使用したければ、VPSのインスタンスを使用することを推奨しています。非推奨というわけではないのですが動作保証をしているWordPressと異なりDrupalに対しては明確な動作保証を発表していません。
私自身が、Drupalを使用してみたいといった興味から所有していたXserverビジネススタンダードのアカウントに無理やりDrupalをインストールし運営する中で生じたエラーです。
現状、Xserverビジネススタンダードでの仮運営を行なっていますが、CivicThemeのDrupal11への対応状況を見て、XserverのVPSサービスへの移行を視野に入れていますので、今回のエラーの根本的な解決方法が見つからなくても、運営への影響は限定的なので、機会と解決策が見つかれば対応しようと考えています。
Drupalの記事
関連するDrupalでWEBサイトを構築する為の環境構築の記事やDrupalについて書いた記事になります。
記事は全てナンバリングしています。Drupalを初めて使う為の準備から始まる最初の記事から読む事もできます。
最新の記事
Drupalについて書いた最新の記事になります。
#D30 Civic Theme 1.9.0 UpDate
#D29 Drupal Core Update
Life Styleの記事
Drupalとは関係ないのですがLife Styleの記事も書いていますのでよろしければ購読ください。