تغییر مسیر www برای ریشه در AWS RT53

باور نکن ، فقط تایپ کن is www an anachronism
در جستجوی گوگل به احتمال زیاد پاسخ مشابه موارد زیر را دریافت خواهید کرد:
من به تازگی دامنه های خود را از Godaddy به RT53 مهاجرت کردم و این روند به همان اندازه که امیدوار بود مستقیم نبود.
مسیر 53 گزینه های گسترده ای را برای مراجعه به منابع AWS در سطح دامنه ارائه می دهد ، امکان ادغام بهتر و تلاش را ارزشمند می کند.
بیشتر ثبت های دامنه (مانند GoDaddy) رابط کاربری مناسب را برای اجازه دادن به مشتریان برای ارسال دامنه ها ارائه می دهند. هیچ استاندارد W3C وجود ندارد که نحوه اجرای ارائه دهندگان رجیستری DNS را برای حمل و نقل دامنه تنظیم کند. بنابراین کاملاً به ارائه دهندگان فردی بستگی دارد که چگونه می توانند حمل و نقل را اجرا کنند.
بر خلاف بسیاری از ارائه دهندگان ثبت دامنه ، RT53 گزینه حمل و نقل دامنه را از جعبه ارائه نمی دهد. اگر مستندات را بخوانید ، به شما می گوید که تعریف رکورد CNAME در RT53 تمام کاری است که باید انجام دهید. خوب ، این فقط به این روش کار نمی کند (بر اساس تجربه من ، اگر اشتباه می کنم ، احساس راحتی کنید در نظرات ارسال کنید – همیشه به دنبال یادگیری چیز جدید هستید). تنها راهی که من می توانم آن را کار کنم ، اضافه کردن عملکرد ساده لبه بود که تمام درخواست ها را به برنامه وب من رهگیری می کند و پاسخ 301 (به طور دائم) را به صورت برنامه ای برمی گرداند.
فقط برای اثبات نظر من ، اینجاست CNAME
رکورد من در منطقه میزبان خود برای https://wwww.wisaw.com دارم
و اگر روی پیوند بالا کلیک کنید ، به هیچ چیز برطرف نمی شود.
بیایید ببینیم ساده ترین راه برای اجرای راه حل جایگزین چیست.
در پشته CDK خود ، عملکرد لبه را مانند این تعریف کنید:
const redirectLambdaEdgeFunction =
// new lambda.Function( // trying to define it as an Lambda@Edge function
new cloudfront.experimental.EdgeFunction(
this,
`${deployEnv()}_redirectLambdaEdgeFunction`,
{
runtime: lambda.Runtime.NODEJS_22_X,
code: lambda.Code.fromAsset(
path.join(
__dirname,
"../lambda-fns/lambdas/redirectLambdaEdgeFunction",
),
),
// code: lambda.Code.fromAsset('lambda-fns/lambdas.zip'),
handler: "index.handler",
memorySize: 128,
timeout: cdk.Duration.seconds(5),
// insightsVersion,
logRetention,
},
)
با فرض اینکه شما میزبان برنامه تک صفحه خود هستید S3
سطل با CloudFront
distro (نحوه انجام این کار را در اینجا بخوانید: https://dev.to/dmitryame/serving-static-content-from-s3-bucket-195p) ، اضافه کنید edgeLambdas
بخش به defaultBehavior
از شما CloudFront distribution
مثل این:
// Create the CloudFront distribution with S3 as an origin
const distribution = new cloudfront.Distribution(this, "wisaw-distro", {
priceClass: cloudfront.PriceClass.PRICE_CLASS_100,
defaultBehavior: {
origin: cloudfront_origins.S3BucketOrigin.withOriginAccessControl(webAppBucket),
compress: true,
cachePolicy: basicCachePolicy,
originRequestPolicy: allForwardPolicy,
viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, // Add this line
edgeLambdas: [
{
eventType: cloudfront.LambdaEdgeEventType.VIEWER_REQUEST,
functionVersion: redirectLambdaEdgeFunction.currentVersion,
includeBody: true,
},
],
},
...
و اینجا است Edge
اجرای عملکرد:
exports.handler = async (event) => {
const request = event.Records[0].cf.request;
// CloudFront headers are in format: { "host": [{"key": "Host", "value": "www.wisaw.com"}] }
const host = request.headers.host && request.headers.host[0].value;
if (host === 'www.wisaw.com') {
// Build the new URL, preserving query string if present
let redirectUrl = `https://wisaw.com${request.uri}`;
if (request.querystring) {
redirectUrl += `?${request.querystring}`;
}
return {
status: '301',
statusDescription: 'Moved Permanently',
headers: {
location: [{
key: 'Location',
value: redirectUrl
}]
}
};
}
return request;
};
این بسیار مستقیم به جلو و خود توضیحی است.
- همه درخواست ها را رهگیری کنید
- اگر میزبان درخواست شده مطابقت داشته باشد
www.wisaw.com
– پاسخ را با تغییر مسیر که پیشوند را نوار می کند آماده کنیدwww
وت - این پاسخ را با وضعیت برگردانید
301
پس از مجدداً پشته CDK خود – همه چیز فقط کار خواهد کرد.
فقط برای کامل کردن امور ، شما همچنین می خواهید همه خود را مطمئن کنید http
درخواست تغییر مسیر به https
بشر اگر شما درخواست کنید ، عملکرد لامبدا این کار را برای شما انجام می دهد www
زیر دامنه اما اگر به http://wisaw.com ضربه بزنید ، چه می کنید؟ در CloudFront
تعریف شما CDK
پشته ، یک خط کد وجود دارد که این رفتار را تعریف می کند:
viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, // Add this line
و این همه است. با تشکر از خواندن
کد کامل این پست را می توان در اینجا یافت: https://github.com/echowaves/wisaw.cdk
برنامه وب میزبان S3 با استفاده از تغییر مسیر به درستی تعریف شده https://wisaw.com است
هک شدن مبارک