For non-Japanese speakers

All the articles and content on this website are written in Japanese. If you would like to read them in a different language, please use the translation function on your browser. You may not be able to understand the finer points of the text, but you should be able to get the general idea.

Notice

今回の記事は、XserverビジネススタンダードにDrupalをイレギュラーな形でインストールを行い、機能制限を回避しURL表示のプライマリーを変更する設定になります。リダイレクトの設定が特殊であり、軽微な不具合も出ています。他の動作環境では深刻な不具合を出す可能性があります。記事を参考に設定を行う場合十分な調査と検証を行った上ご自身の責任において行なって下さい。

ドキュメントルートの設定

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の設定であまり良い設定をしていません。

  1.  すべてのリクエストを /recommended-project/web に転送
  2. /recommended-project/web を / にリダイレクト
  3. http:// から https:// にリダイレクト

/でDrupalのページを表示させ、httpをhttpsにリダイレクトする設定で、/ 表示に関しての設定はループ的な設定を行なっています。

現在の仮設定のURL表示 drupal.hooked-on01.com/ja/recommended-project/web/を drupal.hooked-on01.com/jaと表示させる為に.htaccessの設定を変更します。

.htaccessの設定

今回以下の設定を行います。

  1. /を/topにリダイレクト
  2. /recommended-project/web を完全に隠し、ルートとして扱う設定
  3. https://drupal.hooked-on01.com/recommended-project/webhttps://drupal.hooked-on01.com にリダイレクト
  4. 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/webhttps://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サービスへの移行を視野に入れていますので、今回のエラーの根本的な解決方法が見つからなくても、運営への影響は限定的なので、機会と解決策が見つかれば対応しようと考えています。

URL表示の設定が完了しました。

管理画面のログインや、設定変更処理のリダイレクトでのエラーが出てしまっていますが、URL表示にProjekt-name/webを出さない設定は完了しました。

共用サーバーであるXserverビジネススタンダードに半ば無理やりDrupalのインストールを行い運営しているので、機能制限をどう回避するかといった内容の記事となっています。今回の私のケースはかなりレアなケースですので閲覧された方の参考にはならないと考えていますが、一つのケースとして認識いただければと存じます。

私自身も、Xserver VPSへの移行を検討しており、Drupalも11xに対応しています。私が使用しているCivic Themeの11xへの対応状況ですが使用モジュールがStableとなっていない事から移行の様子をみています。

Drupalの記事

関連するDrupalでWEBサイトを構築する為の環境構築の記事やDrupalについて書いた記事になります。

記事は全てナンバリングしています。Drupalを初めて使う為の準備から始まる最初の記事から読む事もできます。

環境構築

DrupalやCivic Themeの設定やインストール、Local環境の構築やサーバーへのインストールなど環境構築やエラーの対応に関わる記事をまとめています。
  • Drupal記事まとめ
  • 環境構築

Drupal記事

Drupalについて記事を書いています。このWEBサイトを構築していく上でのトピックになります。プログラミングやソースコードなどエンジニア的な記事ではなく、プログラミング経験がない個人がDrupalでパーソナルなWEBサイトを構築するという観点での記事になります。
  • Drupal記事まとめ

最新の記事

Drupalについて書いた最新の記事になります。

#D35 Thanks for technical advice.

当サイトをご覧いただいた方から、リダイレクトエラーについての技術的なアドバイスをいただきました。わかりやすい解説をいただき、エラーの解決ができましたので記事にしています。
  • 雑感
  • Drupalの記事

#D34 Colour Generator Problem

Drupal10.4.xに更新以降、Civic Themeのカラージェネレーターが効かなくなりデフォルトの配色での公開となっていましたが修正パッチが配布されていたので試してみました。
  • Civic Theme
  • Drupalの記事

#D32 Drupal 10.4.0

Drupal Coreが10.3xから10.4xにアップデートされましたので当サイトも早速アップデートします。
  • Civic Theme
  • Drupalの記事

#D31 Civic Theme Sub Theme

Node.jsのバージョン制限の問題でインストールしていなかったサブテーマをインストールして、サブテーマでの運営に切り替えます。
  • Drupalの記事
  • Civic Theme

Life Styleの記事

Drupalとは関係ないのですがLife Styleの記事も書いていますのでよろしければ購読ください。

Life Style記事

ライフスタイルの記事になります。Drupalに触れる目的でこのWEBサイトを立ち上げています。元はWord Pressで作成した記事をこちらのWEBサイトに再構築しています。Word Pressも学習目的で利用したのですが記事をしっかり作る事を目的としていたので、テーマに興味があればそれなりに楽しめると思います。
  • Life Style記事まとめ
  • 環境構築
  • Drupalの記事