سؤال

هل من الممكن وضع رأس إعادة توجيه على كائن S3؟ مثل 301 إعادة التوجيه.

علي سبيل المثال:

mybucket.amazon-aws.com/myobject --> example.com/test

ويفضل عن طريق تعيين رأس مثل هذا على الكائن:

HTTP/1.1 301 Moved Permanently
Location: http://example.com/test
Content-Type: text/html
Content-Length: 0
هل كانت مفيدة؟

المحلول

خلال الشهر الماضي ، تمت إضافة هذه الوظيفة للتو.

يمكنك العثور على وثائق API هنا:

http://docs.amazonwebservices.com/amazons3/latest/dev/how-to-page-redirect.html

عندما تضع كائنك ، تحتاج إلى تعيين ملف x-amz-website-redirect-location مفتاح ضد هذا الكائن إلى إعادة توجيه 301 التي ترغب في استخدامها.

يمكنك أيضا استخدام وحدة التحكم.

enter image description here

نصائح أخرى

في حالة تمكين استضافة موقع الويب للدلو ، هناك طريقة بديلة لإضافة 301 إعادة التوجيه. وفقًا لـ IT يتم وصف قواعد إعادة التوجيه على مستوى الجرافة في شكل XML ، ويمكن تحديدها في خصائص Bucket عبر وحدة التحكم في موقع AWS S3 (قسم استضافة موقع الويب الثابت). يمكن العثور على وثائق كاملة حول بناء الجملة لها حاليًا هنا.

هذا النهج مناسب عندما يكون لديك حركات URL ضخمة بقدر ما هو أسهل في إدارة جميع التوجيه في مكان واحد. على سبيل المثال ، من الممكن تحديد قواعد إعادة التوجيه

<RoutingRule>
    <Condition>
        <KeyPrefixEquals>index.php</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <ReplaceKeyWith>index.html</ReplaceKeyWith>
    </Redirect>
</RoutingRule>
<RoutingRule>
    <Condition>
        <KeyPrefixEquals>blog.php?id=21</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <ReplaceKeyWith>mysql-utf-8-database-creation-snippet.html</ReplaceKeyWith>
    </Redirect>
</RoutingRule>

يبدو أنه هو نفسه إنشاء كائنات مزيفة وتحديد بيانات تحديد الموقع المحددة لـ X-AMZ-Website-Website. الأخبار السيئة هي أنه لا يمكن أن يكون هناك أكثر من 50 من هذه القواعد في XML لدلو واحد. ونعم ، ليس من المناسب إدارة XML. لكن بالنسبة لي بهذه الطريقة أسهل في الوقت الحاضر. مرة أخرى ، لأنه من الأسهل إدارة جميع الملفات في مكان واحد.

تعتبر لعبة XML-approach مفيدة للغاية عندما تقوم ، على سبيل المثال ، بإعادة تسمية دليل مع الكثير من الصفحات. في هذه الحالة ، من الضروري إنشاء قاعدة إعادة توجيه واحدة للدليل ، بدلاً من قاعدة منفصلة لكل صفحة بداخلها. على سبيل المثال

<RoutingRule>
    <Condition>
        <KeyPrefixEquals>blog/</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <ReplaceKeyPrefixWith>it-blog/</ReplaceKeyPrefixWith>
    </Redirect>
</RoutingRule>

وفقا لهذه القاعدة example.com/blog/whatever سيتم إعادة توجيهها إلى example.com/it-blog/whatever.

ميزة أخرى مفيدة لهذا النهج هي أنه يحل محل البادئات فقط. بالطريقة نفسها كما هو الحال مع الدلائل ، من الممكن إعادة توجيه الصفحة ، ولكن حفظ معلمات الاستعلام. قد يكون من المناسب إذا كان هناك بعض معالجة JS لهذه المعلمات الاستعلام. مع بيانات تحديد الموقع المحددة X-AMZ-Website-Website-من المحتمل أن تفقدها.

كما ذكرت الكتابة وقراءة XML قد تكون غير مريحة. للتغلب على هذا كتبت أداة بسيطة عبر الإنترنت في GWT لتحويل نص عادي مع عناوين URL السابقة والجديدة إلى شكل XML. يستخدمKeyPrefixEquals المسند والتنفيذ ReplaceKeyPrefixWith إعادة توجيه.

وأخيرا ، وفقا ل توثيق، إذا تم تعطيل استضافة موقع الويب ، فإن دعم إعادة التوجيه لا ينطبق على هذا الدلو.

تحرير: انظر الإجابة أعلاه لأن هذه الوظيفة هي الآن أصلية في AWS

لا حقا لا. لا توجد ميزة في ثناياه عوامل تسمح بذلك ، ما يمكنك فعله هو إنشاء كائنك ، وحتى إذا لم تقم بحفظه كـ HTML ، فيمكنك تطبيقه كملف HTML.

علي سبيل المثال:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="Refresh" content="0; URL=http://www.example.com/target/">
    <title>Redirect</title>
</head>

<body>
    <a href="http://www.example.com/target/">http://www.example.com/target/</a>
</body>
</html>

انظر إلى هذه الصفحة هنا: عرض المصدر عليها بسرعة.

أنظر المصدر:http://carltonbale.com.s3.amazonaws.com/distance_chart.png

يمكنك رؤية تفسير هنا:

النقطة 8: http://carltonbale.com/9-hidden-features-of-amazon-s3

Htaccess 301 إلى Amazon S3 إعادة توجيه الترجمة


نمط htaccess:

Redirect 301 /old/old.html http://www.new.com/new/new.html

يترجم إلى:

<RoutingRule>
    <Condition>
        <KeyPrefixEquals>old/old.html</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <HostName>www.new.com</HostName>
        <Protocol>http</Protocol>
        <HttpRedirectCode>301</HttpRedirectCode>
        <ReplaceKeyWith>new/new.html</ReplaceKeyWith>
    </Redirect>
</RoutingRule>

من المحتمل أن تكتب نصًا صغيرًا على غرار:

// -----------------
// Javascript
// htaccess to amazon s3 redirect for static s3 websites.
// (XML goes into S3 Bucket Properties Editor > [x] Enable website hosting > Edit Redirection Rules box.)
// -----------------

var list = [
    "Redirect 301 /old/old-1.html http://www.new.com/new/new-1.html",
    "Redirect 301 /old/old-2.html http://www.new.com/new/new-2.html",
    "Redirect 301 /old/old-3.html http://www.new.com/new/new-3.html"
];

var output = [];

output.push('<?xml version="1.0"?>');
output.push('<RoutingRules>');

for(var i=0; i<list.length; i++){

    var item = list[i].replace("Redirect 301 /", "").split(" ");
    var oldLoc = item[0];
    var newLoc = item[1];

    output.push("   <RoutingRule>");
    output.push("       <Condition>");
    output.push("           <KeyPrefixEquals>" + oldLoc + "/KeyPrefixEquals>");
    output.push("       </Condition>");

    output.push("       <Redirect>");
    if(newLoc.substr(0, 1) == "/"){

        output.push("           <ReplaceKeyWith>" + newLoc + "</ReplaceKeyWith>");

    } else {

        var splitNewLoc = newLoc.replace("http://", "").split("/");
        var host = splitNewLoc.shift();
        var path = splitNewLoc.join("/");

        output.push("           <HostName>" + host + "</HostName>");
        output.push("           <Protocol>http</Protocol>");
        output.push("           <HttpRedirectCode>301</HttpRedirectCode>");

        if(path){
            output.push("           <ReplaceKeyWith>" + path + "</ReplaceKeyWith>");
        }

    }

    output.push("       </Redirect>");
    output.push("   </RoutingRule>");

}

output.push('</RoutingRules>');

print(output.join("\n"));

تحذير: يحد الأمازون من عدد القواعد إعادة التوجيه إلى 50.

Awscli يتيح لك القيام بذلك بسهولة الآن (نوع من)

  1. تأكد من أن الجرافة عامة 100 ٪
  2. تأكد من وجود دلو في وضع استضافة موقع الويب
  3. الرجوع فقط إلى الموقع باستخدام عنوان URL الكامل له https://<bucket_name>.s3-website-<region>.amazonaws.com
  4. استخدم ال s3api دعوة لتعيين إعادة التوجيه

    AWS S3API PUT-OBJECT-ACL-Read-Read-Website-Redirectore "http://other-location.com"-bucket foo-bucket-Key في مكان ما/بلاه

ملحوظة: لا تنشر أي كائن إلى S3 ، لأنه سيخدم فقط 301 وإعادة التوجيه Location رأس.

اختبار مع

curl -v 2 -L https://<bucket_name>.s3-website-<region>.amazonaws.com/somewhere/blah

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top