ブログページでURLにサイトIDが追加されてしまう。 投稿する

投稿者:matsu  投稿日時:2024-02-12 20:35:26
お世話になっております。
さくらインターネットのスタンダードプランのサーバーを利用して、SOYCMSを利用させていただいております。

/home/xxxxxx/www/cms ←SOY CMS本体
/home/xxxxxx/www/サイトID ←SOY CMSで作成したサイト

独自ドメインを
/home/xxxxxx/www/サイトID
に割り当て、
/home/xxxxxxwww/サイトID/.htaccess 内の
RewriteBase / サイトID

RewriteBase /
に書き換えしました。

これで、トップページ(例:https://abc.com/)以外の下層ページ(https://abc.com/サイトID/a.htmlとはならず、https://abc.com/a.htmlで表示される。)もアクセスできるようになりましたが、
ブログページで使用している
~からのリンクですと、
https://abc.com/blog/article/xxxxxx ではなく、
https://abc.com/サイトID/blog/article/xxxxxx になってしまい、ページが表示できません。

お忙しいところ恐れ入りますが、対応策を教えていただけると幸いです。

SOY CMSバージョン: SOY CMS 3.14.9 on PHP 8.0.30.
サーバー:さくらインターネットスタンダードプラン
投稿者:齋藤毅  投稿日時:2024-02-13 04:31:46
SOY CMSにログインした後、サイト一覧>(該当するサイトの)詳細を開くと、サイトURLの入力フォームがありますが、そちらの値は意図したURLになっていますか?
投稿者:matsu  投稿日時:2024-02-13 09:30:48
はい。
独自ドメインのURLを入力しております。
https://abc.com/
投稿者:齋藤毅  投稿日時:2024-02-13 10:33:43
.htaccessの変更後にサイト詳細のサイトURLは更新していますか?
もししていなければ入力内容は変更せずに変更ボタンを押してみてください。
投稿者:matsu  投稿日時:2024-02-13 12:31:49
はい。それも実行いたしました。
投稿者:齋藤毅  投稿日時:2024-02-13 12:42:17
URLの設定でないとすると、別の箇所の設定に見落としがありそうです。

ブログページで使用している
~からのリンクですと、
https://abc.com/blog/article/xxxxxx ではなく、
https://abc.com/サイトID/blog/article/xxxxxx になってしまい、ページが表示できません。
上記の「~からのリンクですと」の箇所が何らかの理由で消えてしまっているかもしれません。
〜の箇所を詳しく教えていただけないでしょうか。
投稿者:matsu  投稿日時:2024-02-13 13:30:43
申し訳ありません。
こちらです。
<a cms:id="entry_link">テキスト</a>
投稿者:齋藤毅  投稿日時:2024-02-13 14:36:40
cms:id="entry_link"周りのコードを確認してみたのですが、
.htaccessの変更後にサイト詳細のサイトURLは更新していますか?
もししていなければ入力内容は変更せずに変更ボタンを押してみてください。
上記の内容で解決出来ることになっているのですが、もう一度変更ボタンを押した後にキャッシュを削除して該当する箇所の動作を確認をお願いします。

entry_linkの仕組みですが、サイト詳細で登録したサイトURL + ブログページのURI + article + 記事名になります。

もし解決しなければ、.htaccessの記述内容を教えてください。
投稿者:matsu  投稿日時:2024-02-13 18:40:36
もう一度変更ボタンを押した後にキャッシュを削除して該当する箇所の動作を確認をお願いします。

こちらを実行しましたが、
変わりはありませんでした。

下記が.htaccessです。

# @generated by SOY CMS at 2024-02-04 13:20:15
RewriteEngine on
RewriteBase /

# 常にhttpsでアクセスさせる(httpでのアクセスをhttpsにリダイレクトする)
#RewriteCond %{HTTPS} =off
#RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]

RewriteCond %{IS_SUBREQ} =false
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.htm !-f
RewriteCond %{REQUEST_URI} !^/server-status
RewriteCond %{REQUEST_URI} !^/server-info
RewriteCond %{REQUEST_URI} !/index.php/
RewriteRule ^(.*)$ index.php?pathinfo=$1&%{QUERY_STRING} [L]

よろしくお願いいたします。
投稿者:齋藤毅  投稿日時:2024-02-13 19:40:55
/CMSインストールディレクトリ/common/site_include/CMSBlogPage.class.php

$this->siteUrl = $this->getSiteUrl();

//ページのURL
$this->pageUrl = self::_getPageUrl();

var_dump($_SERVER);
$this->siteUrl = $this->getSiteUrl();
var_dump($this->siteUrl);

//ページのURL
$this->pageUrl = self::_getPageUrl();
var_dump($this->pageUrl);
exit;
に変更して、公開側にアクセスして出力された値をお伝えください。
投稿者:matsu  投稿日時:2024-02-13 21:41:20
上記の変更を行いましたが、
<a cms:id="entry_link">テキスト</a>
からのリンクが、
https://abc.com/サイトID/blog/article/xxxxxx
なってしまいます。
投稿者:齋藤毅  投稿日時:2024-02-14 05:55:54
画面にたくさんのエラーメッセージのようなものが出力されているはずですので、そちらの値を教えてください。
投稿者:matsu  投稿日時:2024-02-14 14:15:32
こちらが表示されました。

array(50) { ["PHP_INI_SCAN_DIR"]=>string(24) ":/home/xxxxxx/.php.config" ["PHPRC"]=>string(22) "/usr/local/php/8.0/etc" ["PATH"]=>string(28) "/usr/local/bin:/usr/bin:/bin" ["REDIRECT_STATUS"]=>string(3) "200" ["HTTPS"]=>string(2) "on" ["HTTP_HOST"]=>string(16) "xxxxxx.uh-oh.jp" ["HTTP_X_REAL_IP"]=>string(15) "123.176.224.217" ["HTTP_LISTEN_IPADDR"]=>string(13) "219.94.129.77" ["HTTP_SEC_CH_UA"]=>string(65) ""Not A(Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"" ["HTTP_SEC_CH_UA_MOBILE"]=>string(2) "?0" ["HTTP_SEC_CH_UA_PLATFORM"]=>string(9) ""Windows"" ["HTTP_UPGRADE_INSECURE_REQUESTS"]=>string(1) "1" ["HTTP_USER_AGENT"]=>string(111) "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36" ["HTTP_ACCEPT"]=>string(135) "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ["HTTP_SEC_FETCH_SITE"]=>string(4) "none" ["HTTP_SEC_FETCH_MODE"]=>string(8) "navigate" ["HTTP_SEC_FETCH_USER"]=>string(2) "?1" ["HTTP_SEC_FETCH_DEST"]=>string(8) "document" ["HTTP_ACCEPT_ENCODING"]=>string(17) "gzip, deflate, br" ["HTTP_ACCEPT_LANGUAGE"]=>string(23) "ja,en-US;q=0.9,en;q=0.8" ["SERVER_SIGNATURE"]=>string(0) "" ["SERVER_SOFTWARE"]=>string(6) "Apache" ["SERVER_NAME"]=>string(16) "xxxxxx.uh-oh.jp" ["SERVER_ADDR"]=>string(10) "***.***.***.***" ["SERVER_PORT"]=>string(3) "443" ["REMOTE_HOST"]=>string(33) "xxxxxxxxxxxxxxxxxxxxxxxx" ["REMOTE_ADDR"]=>string(15) "***.***.***.***" ["DOCUMENT_ROOT"]=>string(15) "/home/xxxxxx/www" ["REQUEST_SCHEME"]=>string(5) "https" ["CONTEXT_PREFIX"]=>string(0) "" ["CONTEXT_DOCUMENT_ROOT"]=>string(15) "/home/xxxxxx/www" ["SERVER_ADMIN"]=>string(18) "[no address given]" ["SCRIPT_FILENAME"]=>string(34) "/home/xxxxxx/www/サイトID/index.php" ["REMOTE_PORT"]=>string(1) "0" ["REDIRECT_URL"]=>string(33) "/information/article/4" ["REDIRECT_QUERY_STRING"]=>string(41) "pathinfo=information/article/4" ["GATEWAY_INTERFACE"]=>string(7) "CGI/1.1" ["SERVER_PROTOCOL"]=>string(8) "HTTP/1.1" ["REQUEST_METHOD"]=>string(3) "GET" ["QUERY_STRING"]=>string(41) "pathinfo=information/article/4" ["REQUEST_URI"]=>string(34) "//information/article/4" ["SCRIPT_NAME"]=>string(10) "/index.php" ["PHP_SELF"]=>string(10) "/index.php" ["REQUEST_TIME_FLOAT"]=>float(1707887436.508967) ["REQUEST_TIME"]=>int(1707887436) ["argv"]=>array(1) { [0]=>string(41) "pathinfo=information/article/4" } ["argc"]=>int(1) ["PATH_INFO"]=>string(33) "/information/article/4" ["SOYCMS_PAGE_URI"]=>string(11) "information" ["SOYCMS_PAGE_ID"]=>string(1) "6" } string(25) "https://xxxxxx.uh-oh.jp/" string(22) "/サイトID/information/"
投稿者:齋藤毅  投稿日時:2024-02-14 14:46:10
ありがとうございます。
["DOCUMENT_ROOT"]=>string(15) "/home/xxxxxx/www"
こちらの値ですが、今までのやり取りからだと、
["DOCUMENT_ROOT"]=>string(15) "/home/xxxxxx/www/サイトID"
でなければならないと思います。

さくらのコントロールパネルで、独自ドメインに当てたパスが意図したところになっているかを確認してみてください。

もし、設定した内容が正しければ、
/home/xxxxxx/www/サイトID/index.php
を開き、
<?php
の下の行に
$_SERVER["DOCUMENT_ROOT"] .= "/サイトID"
を加えてみたら如何でしょうか?
投稿者:matsu  投稿日時:2024-02-14 15:56:22
いろいろとありがとうございます。

さくらのコントロールパネルで、独自ドメインに当てたパスが意図したところになっているかを確認してみてください。

パスに間違いはありませんでした。

もし、設定した内容が正しければ、
/home/xxxxxx/www/サイトID/index.php
を開き、
<?php
の下の行に
$_SERVER["DOCUMENT_ROOT"] .= "/サイトID"
を加えてみたら如何でしょうか?

こちらを試したところ、サイト自体が開かなくなりました。

google chromeブラウザです。下記が表示されます。
このページは動作していませんsashtop.uh-oh.jp では現在このリクエストを処理できません。
HTTP ERROR 500
投稿者:齋藤毅  投稿日時:2024-02-14 16:13:54
パスに間違いがなければ、原因の特定は難しいです。

独自ドメインを
/home/xxxxxx/www/サイトID
に割り当て、
/home/xxxxxxwww/サイトID/.htaccess 内の
RewriteBase / サイトID
を
RewriteBase /
に書き換えしました。
上記のような難しい処理は止め、別途サイトを借りて運営することをおすすめします。

もし、引き続き挑戦するのであれば、
/home/xxxxxx/www/サイトID/index.php

<?php
の下の行に
if(!defined("SOYCMS_TARGET_DIRECTORY")) define("SOYCMS_TARGET_DIRECTORY", "/home/xxxxxx/www");
を追加して、
"/home/xxxxxx/www"
の値をいろいろと変更してみて、意図通りに動作する値を探してみてください。
投稿者:matsu  投稿日時:2024-02-14 16:52:13
わかりました。
色々とありがとうございました。
投稿者:齋藤毅  投稿日時:2024-02-15 04:21:24
もしまた試しているのであれば、
if(!defined("SOYCMS_TARGET_DIRECTORY")) define("SOYCMS_TARGET_DIRECTORY", "/home/xxxxxx/www");
の対応は無しにして

CMSインストールディレクトリ/common/site_include/CMSBlogPage.class.php
の813行目の
$pageUrl = CMSPageController::createRelativeLink($this->page->getUri(), false);

$pageUrl = substr($_SERVER["REDIRECT_URL"], 0, strrpos($_SERVER["REDIRECT_URL"], $this->page->getUri())+strlen($this->page->getUri()));
に変更したら如何でしょうか?
投稿者:matsu  投稿日時:2024-02-15 11:04:50
ありがとうございます。
上記の変更を行いましたが、変わりは見られません。

~SOY CMS 3.1.3.62 on PHP 8.0.30.まで、同じ方法で作成したサイトのブログページに利用している、
<a cms:id="entry_link">テキスト</a>
のリンクが、
https://abc.com/サイトID/blog/article/xxxxxx になることなく、
https://abc.com/blog/article/xxxxxx
となるのですが。
投稿者:齋藤毅  投稿日時:2024-02-15 12:30:29
本件に関しまして、SOY CMS 3.1.3.62以降のバージョンでNGINXに対応する為にURLの出力の仕様を変更しています。
非推奨のマルチドメイン対応よりもNGINX対応の方が重要ですので、SOY CMS 3.1.3.62の仕様に戻すことはないことは予めご了承ください。

https://abc.com/サイトID/blog/article/xxxxxx になることなく、
https://abc.com/blog/article/xxxxxx
となるのですが。
ですが、SOY CMS 3.1.3.62での対応の方になりますか?

$pageUrl = substr($_SERVER["REDIRECT_URL"], 0, strrpos($_SERVER["REDIRECT_URL"], $this->page->getUri())+strlen($this->page->getUri()));
先程の対応ですが、こちらは
var_dump($_SERVER);
から得られました値を元に書き換えています。

本件に関しまして認識のズレがあるように思います。

もし、挑戦を続けるのであれば下記の内容の整理をお願いします。

<a cms:id="entry_link">テキスト</a>
だけではなく、block:id(もしくはb_block:id)で囲われたコード全体をお伝えください。

もし、block:idを使用しているのであれば、どのブロック(ラベルブロック等)を設定しているか?も併せてお伝えください。
投稿者:matsu  投稿日時:2024-02-15 12:59:14
申し訳ありません。再度整理いたします。

■~SOY CMS 3.1.3.62 on PHP 8.0.30.まで
下記の方法でサイトを作成し、
<a cms:id="entry_link">テキスト</a>
は正常にリンクしておりました。

サーバーは、さくらインターネットスタンダードプランです。

/home/xxxxxx/www/cms ←SOY CMS本体
/home/xxxxxx/www/サイトID ←SOY CMSで作成したサイト

独自ドメインを
/home/xxxxxx/www/サイトID
に割り当て、
/home/xxxxxxwww/サイトID/.htaccess 内の
RewriteBase / サイトID

RewriteBase /
に書き換えしました。

これで、トップページ(例:https://abc.com/)以外の下層ページ(https://abc.com/サイトID/a.htmlとはならず、https://abc.com/a.htmlで表示される。)もアクセスできるようになりましたが、
トップページの新着情報、ブログページで使用している
<a cms:id="entry_link">テキスト</a>
~からのリンクですと、
https://abc.com/blog/article/xxxxxx ではなく、
https://abc.com/サイトID/blog/article/xxxxxx になってしまい、ページが表示できません。

下記は
<a cms:id="entry_link">
を使っているblockです。

・トップページ新着情報
<!-- block:id="aa" -->
<dl>
<dt><!-- cms:id="create_date" cms:format="Y-m-d" -->タイトル<!-- /cms:id="create_date" cms:format="Y-m-d" --></dt>
<dd><a cms:id="entry_link"><!-- cms:id="title" -->タイトル<!-- /cms:id="title" --></a></dd>
</dl>
<!-- /block:id="aa" -->

・インフォメーション(ブログページ) :xx_xxxxxx_top.html
<!-- block:id="aaa" -->
<div>
<div><a cms:id="entry_link"><img cms:id="ccc"></a></div>
<div>
<div cms:id="create_date" cms:format="Y/m/d">2018/07/23</div>
<h3 cms:id="title"><a cms:id="entry_link*">記事タイトル</a></h3>
</div>
</div>
<!-- /block:id="aaa" -->

・インフォメーション(ブログページ) :xx_xxxxxx_archive.html
<!-- block:id="aaa" -->
<div>
<div><a cms:id="entry_link"><img cms:id="ccc"></a></div>
<div>
<div cms:id="create_date" cms:format="Y/m/d">2018/07/23</div>
<h3 cms:id="title"><a cms:id="entry_link*">記事タイトル</a></h3>
</div>
</div>
<!-- /block:id="aaa" -->

■SOY CMS 3.14.9 on PHP 8.0.30.
SOY CMS 3.14.9 on PHP 8.0.30.を利用し、上記の内容で同じようにサイトを作成したところ、
トップページの新着情報、ブログページで使用している
<a cms:id="entry_link">テキスト</a>
からのリンクが、
https://abc.com/blog/article/xxxxxx ではなく、
https://abc.com/サイトID/blog/article/xxxxxx になってしまい、ブログページの xx_xxxxxx_entry.html が開けない状態です。
投稿者:齋藤毅  投稿日時:2024-02-15 13:04:37
ありがとうございます。
やはりblock:idの方でしたか。

<!-- block:id="aaa" -->
で設定しているブロック(ラベルブロック)を教えてください。

今までの対応はすべてb_block:id="entry_list"の方でした。
投稿者:matsu  投稿日時:2024-02-15 13:40:27
新着情報とブログページのブロックは「ラベルブロック」を選択しています。
投稿者:齋藤毅  投稿日時:2024-02-15 14:09:01
CMSインストールディレクトリ/common/site_include/block/LabeledBlockComponent/block.php
の101行目付近の
$articlePageUrl = $page->siteRoot . $blogPage->getEntryPageURL();
$categoryPageUrl = $page->siteRoot . $blogPage->getCategoryPageURL();

$articlePageUrl = $page->getSiteRootUrl() . $blogPage->getEntryPageURL();
$categoryPageUrl = $page->getSiteRootUrl() . $blogPage->getCategoryPageURL();
に変更すれば解決するかもしれません。
投稿者:matsu  投稿日時:2024-02-15 14:15:40
ありがとうございます!
解決いたしました。

いろいろとお手数をお掛けしまして、申し訳ありません。
今後ともよろしくお願いいたします。
投稿者:齋藤毅  投稿日時:2024-02-15 14:23:24
今回の修正ですが、古くからあるコードになっていまして、SOY CMS 3.1.3.62でもラベルブロックでは使用できていなかった可能性があります。
他サイトで今回のようなサイトの設定とラベルブロックを使用しているところがあればリンクが出力されているか確認しておいた方が良いです。
投稿者:matsu  投稿日時:2024-02-15 15:44:51
ありがとうございます!
ログインして投稿する