外部サイトへのリンクはクッションページを経由させたい
外部サイトに対するリンクについて以下のような挙動にしたいです。
外部へのリンクをクリック → 確認ページ(クッションページ) →目的のページ
PukiWikiでいう 外部リンクをリダイレクトページ経由にすることで、Refererを消す 機能です。
実装したい理由としてはreferrerヘッダに社外秘なプロジェクト名などが含まれることを回避するためです。
この機能をC5で実現する方法はありますでしょうか。
どうぞ、よろしくお願いいたします。
-----ここからC5の環境情報-----
# concrete5 Version
Core Version - 8.5.2
Version Installed - 8.5.2
Database Version - 20190925072210
# Database Information
Version: 10.3.22-MariaDB
SQL Mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# concrete5 Packages
Stucco (2.1.6)
# concrete5 Overrides
blocks/autonav/templates/view.css, blocks/autonav/templates/c_breadcrumbs.php, blocks/autonav/templates, blocks/autonav
# concrete5 Cache Settings
Block Cache - On
Overrides Cache - On
Full Page Caching - Off
Full Page Cache Lifetime - Every 6 hours (default setting).
# Server Software
LiteSpeed
# Server API
litespeed
# PHP Version
7.2.29
# PHP Extensions
apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dom, exif, fileinfo, filter, ftp, gd, gettext, hash, iconv, igbinary, imagick, intl, json, libxml, litespeed, mbstring, mcrypt, mysqli, mysqlnd, openssl, pcntl, pcre, PDO, pdo_mysql, pdo_sqlite, Phar, posix, readline, redis, Reflection, session, shmop, SimpleXML, sockets, SPL, sqlite3, standard, sysvmsg, sysvsem, sysvshm, tokenizer, wddx, xml, xmlreader, xmlwriter, xsl, Zend OPcache, zip, zlib
# PHP Settings
max_execution_time - 7200
log_errors_max_len - 1024
max_file_uploads - 20
max_input_nesting_level - 64
max_input_time - 60
max_input_vars - 1000
memory_limit - 1024M
post_max_size - 512M
upload_max_filesize - 500M
mysqli.max_links - Unlimited
mysqli.max_persistent - Unlimited
pcre.backtrack_limit - 1000000
pcre.recursion_limit - 100000
redis.pconnect.connection_limit - 0
session.cache_limiter - no value
session.gc_maxlifetime - 7200
opcache.max_accelerated_files - 10000
opcache.max_file_size - 0
opcache.max_wasted_percentage - 5
Re: 外部サイトへのリンクはクッションページを経由させたい
javascript埋め込みでの対応でもアリですか?
Re: 外部サイトへのリンクはクッションページを経由させたい
<script>
function openCushion(e) {
host = location.hostname;
href = this.getAttribute("href");
dn = href.indexOf(host);
if (~href.indexOf("://") && (dn <= -1 || dn > 8)) {
nw = window.open("", "cushion");
ws =
'<p style="text-align:center;margin-top:20px;">' +
'<a href="%s" rel="noreferrer">%s</a><br>にジャンプしちゃうんですか?<br>' +
'<button onclick="window.close();" style="margin-top:20px;">CANCEL</button></p>';
nw.document.body.innerHTML = ws.replace(/%s/g, href);
e.preventDefault();
}
}
window.addEventListener("load", function () {
if (!this.document.getElementById("ccm-tooltip-holder")) {
document.querySelectorAll("a").forEach(function (ce) {
ce.addEventListener("click", openCushion);
}, false);
}
});
</script>
設置方法:
外部へのリンクがあるページに上記をコピペしたHTMLブロックを追加すればOK。
リンクとして埋め込む時は最初と最後の<script></script>タグを外して.jsファイル(例 noreferrer.js)として保存し、適宜ヘッダやbody終盤あたりから読み込んでください。
テンプレートで読み込む場合のサンプルコードは次の通り。
<script type="text/javascript" src="<?= $view->getThemePath() ?>/js/noreferrer.js"></script>
使い方:
編集モードでは動作しませんので、設置後ログアウトした状態でお試しください。
外部リンクをクリックすればクッションページが開きジャンプの確認をします。
動作条件:
次の場合は通常のリンクとして動作します。
・編集モード時
・「絶対パス」「相対パス」「mailto」のリンク
・同一FQDN向けのリンク
※サブドメインが異なる場合はクッションページが表示されます。
お試しあれ。
takuro hishikawa
Re: 外部サイトへのリンクはクッションページを経由させたい
誰か作ってる人いませんか?