/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
/logo/social.webp` без themes/{theme}/ prefix.
// Также social card crawlers (FB/Twitter/Telegram) и Google search index содержат старые
// pre-cutover URLs. 301 → текущий theme's asset.
$legacyLogoRedirect = function ($file) {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/{$file}", 301);
};
Route::get('logo/{file}', $legacyLogoRedirect)
->where('file', '(social|og_image|twitter|favicon|logo|insthacker)\.(png|webp|jpg|jpeg|svg)');
// iOS Safari + iOS apps + Pinterest crawler автоматически запрашивают эти URLs независимо
// от в HTML. 301 → theme's favicon.png (180×180+ ideally).
$appleTouchRedirect = function () {
$template = strtolower(config('core.template') ?? 't21');
return redirect("/themes/{$template}/logo/favicon.png", 301);
};
Route::get('apple-touch-icon{any}.png', $appleTouchRedirect)
->where('any', '(-precomposed|-[0-9]+x[0-9]+|-[0-9]+x[0-9]+-precomposed)?');
// Password managers (1Password, Bitwarden, iCloud Keychain) probe этот URL для passkey
// discovery (W3C draft). Без endpoint'а они fall back на password autofill — функционально
// не сломано, но 404 в логах. Возвращаем валидный пустой manifest.
Route::get('.well-known/passkey-endpoints', function () {
return response()->json(
['enroll' => null, 'manage' => null],
200,
['Cache-Control' => 'public, max-age=86400']
);
});
返金ポリシー | InstHacker
返金ポリシー
この返金ポリシーを注意深くお読みください。
発効日:
2026年4月30日
この返金ポリシー(「ポリシー」)は、
InstHacker サービス(「製品」、「会社」、「私たち」、「当社」)に関連する返金の条件を規定します。ウェブサイト
insthacker.com (「ウェブサイト」)。このポリシーは利用規約/ユーザー契約の不可分の一部を形成し、ユーザーによるすべての支払いに適用されます。
重要: 本製品を使用する、および/またはアクセス料金を支払うことにより、お客様はこのポリシーを読み、その条件に同意したことを確認します。
このポリシーはすべてのプランおよびアクセス期間に適用されます。
1) 一般規定
1.1. InstHacker サービスはデジタル形式で提供され、「現状のまま」および「利用可能な状態で」供給されます。
1.2. 返金は、ウェブサイトに記載されているとおり、製品機能がデモンストレーション/シミュレーションセッションの開始、生成されたデモ出力の表示、セッションの管理(削除/再起動を含む)を含むことを考慮して検討されます。
1.3. セキュリティおよびプライバシーの目的のため、生成されたデモセッション出力および関連する技術データは、限られた期間保存され、自動的に削除される場合があります(インターフェースまたは関連する製品条件で指定されているとおり)。自動削除は返金の独立した根拠ではありません。
2) 合法的使用のための重要な条件
ユーザーが適用法、第三者の権利、または利用規約/ユーザー契約に違反してウェブサイト/製品を使用した、または使用しようとしたと判断された場合、返金は提供されません。
不正使用の兆候 は、契約に従って返金拒否およびアクセス制限またはブロックにつながる場合があります。
内部ログと技術的証拠を使用してリクエストを検証する場合があります。
3) 返金が可能な場合
以下の状況において、全額または一部の返金を承認する場合があります(ログと事実確認に基づく合理的な裁量で):
3.1. 二重請求 / 誤請求
同じ購入に対して2回請求された場合、または明らかな支払い処理エラーがあった場合。
3.2. 支払い確認済みだがアクセスが有効化されていない
支払いが確認されたが製品へのアクセスが提供されなかった場合(例:アカウントアクセスが付与されなかった、有料機能が有効化されなかった)。
3.3. 会社側の重大な技術的障害
当社の過失により製品が動作せず、有料機能の使用が不可能になったことが確認された場合。
3.4. 使用開始前のキャンセル(該当する場合)
デモ/シミュレーションセッションを開始する前にキャンセルを要求し、システムログで確認された場合。
4) 返金が提供されない場合
4.1. アクセス提供済み / 製品使用開始
製品の使用を開始した場合(例:デモ/シミュレーションセッションを開始した、生成された出力を閲覧した、または生成された出力のエクスポート/ダウンロードを使用した)、デジタルサービスは提供されたとみなされるため、通常返金は提供されません。
4.2. ユーザーが提供した不正確なデータまたは設定
メール、連絡先詳細、セッションパラメータ、デバイス/ブラウザ設定、広告ブロッカー、VPN/プロキシ、プロバイダー制限、またはその他の使用を妨げるユーザー側の要因のエラーは、返金の根拠ではありません。
4.3. 記載された機能に述べられていない期待
製品が技術的に利用可能で説明どおりに提供されている間に、主観的な期待との不一致がリクエストの理由である場合。
4.4. 規約違反、不正使用の試み、詐欺
制限の回避、大量の自動化されたアクション、違法使用、第三者の権利侵害、または虚偽の主張を含むがこれに限定されません。
4.5. リクエスト期限切れ
確立された期限(セクション5を参照)後に提出されたリクエストは拒否される場合があります。
5) 返金リクエストの期限
リクエストは、アクティブなアカウントの有効期間内に提出する必要があります —
支払いから3 / 7 / 21暦日 (選択したプランに従って)。返金の根拠が後で発生した場合、期間はその時点から数えられますが、
アカウントの有効期間を超えません.
早く連絡いただくほど、迅速な検証(ログ、支払いステータス、アクセス有効化ステータス)の可能性が高くなります。
6) 返金をリクエストする方法
当社のシステムでお支払いを特定し、リクエストを処理するために、以下の情報をサポートチームにお送りください:
2
支払い方法(BTC / ETH / USDT等)。 正確な方法名を提供してください.
4
トランザクションID: TXID/Hash (暗号通貨)または
Transaction ID
(プロバイダー)
5
ファイルを添付: スクリーンショットまたは写真
支払い成功および/または領収書/明細書を確認するもの
6
問題の簡単な説明と希望する解決策(返金または再有効化)。
情報を確認した後、リクエストの審査に進みます。検証が成功した場合、問題の解決に進みます。
検証 は審査前に必要です。詳細の欠如は処理を遅らせる可能性があります。
添付ファイルが読み取り可能であることを確認してください。
7) 支払いタイプ別の返金方法と詳細
7.1. 暗号通貨(Bitcoin / Ethereum / Tether USDT)
- • 返金は通常、支払いが受け取られたアドレス、または ユーザーによって確認されたアドレスに行われます.
- • ネットワーク手数料、ゲートウェイ手数料、処理コストは返金額から差し引かれる場合があります。
- • 暗号通貨の変動性により、返金は返金時に支払われた金額の相当額で行われる場合があります(または支払いプロバイダーの方法論に従って)。
8) チャージバックと支払い紛争
紛争/チャージバックを開始する前に、サポートに連絡することをお勧めします — 多くの問題はログ検証とアクセス再有効化を通じてより迅速に解決できます。
チャージバックが開始された場合、会社は調査が完了するまでユーザーアカウントへのアクセスを一時的に制限する場合があります。
9) アフィリエイト/リファラルプログラムを通じた購入の特別条件
アフィリエイトリンクを通じて購入が行われ、返金が処理された場合、対応するアフィリエイトコミッションはアフィリエイトプログラムのルールに従ってキャンセルまたは保留される場合があります。
10) 責任の制限
製品は「現状のまま」および「利用可能な状態で」提供されます。
ウェブサイト/製品の使用に関連するクレームに対する可能な補償の最大額は、1つの有料アクセス期間/単位に実際に支払われた金額に制限されます(適用法で別途要求されない限り)。
11) ポリシーの変更
会社はこのポリシーを更新する権利を留保します。新しいバージョンはウェブサイトでの公開時に発効します。製品の継続使用は変更の承諾を構成します。
Cookieを使用しています。
当社のウェブサイトでのエクスペリエンスを向上させるためにデータを収集するためにCookieを使用しています。使用ポリシーをお読みください
Cookie いつでも
変更できます。
ウェブサイトデータ収集設定
当社は、お客様のブラウジング体験の向上、ウェブサイトトラフィックの分析、パーソナライズされた広告の配信、およびウェブサイト全体のパフォーマンス向上のために、CookieおよびJavaScriptライブラリを通じて収集したデータを使用します。
当社は、ウェブサイトが正しく機能するために必要なブラウザCookieを使用しています。例えば、お客様がウェブサイトに再度アクセスした際に遵守できるよう、ウェブサイトデータ収集設定を保存しています。ブラウザの設定でこれらのCookieを無効にすることができますが、その場合、ウェブサイトが意図したとおりに機能しない可能性があります。
より関連性の高いブラウジング体験を提供したり、ウェブサイト上のコンテンツをパーソナライズするために、ユーザーの行動を理解するため。例えば、より関連性の高い情報を提供するために、どのページを訪問したかの情報を収集します。
当社のウェブサイトおよび他のウェブサイトでの広告をパーソナライズし、その効果を測定するため。例えば、当社のウェブサイトで訪問したページに基づいて、パーソナライズされた広告を表示する場合があります。