إعادة توجيه الصفحات من الموقع القديم إلى الموقع الجديد - واحدة تلو الأخرى

StackOverflow https://stackoverflow.com/questions/1421419

سؤال

أحاول إعادة توجيه الصفحات من عدة نطاقات قديمة إلى مجال جديد واحد على أساس صفحة إلى صفحة، وهو:

صفحة 1: http://www.example.org/default.asp?id=1 يعيد التوجيه إلى http://www.example2.org/newpage.htmlالصفحة 2: http://www.example2.org/default.asp?id=2 يعيد التوجيه إلى http://www.example.org/contact.html

...وما إلى ذلك وهلم جرا.سيتم إعادة توجيه كل صفحة قديمة إلى صفحة جديدة محددة.

لقد حاولت أن أكتب شيئًا ما في .htaccess على غرار

Redirect 301 http://www.example.org/default.asp?id=1 h-tp://www.example.org/newpage.html
Redirect 301 http://www.example2.org/default.asp?id=2 h-tp://www.example.org/contact.html

لكن لا حظ حتى الآن.تم تفعيل mod_alias...

لقد حاولت أيضًا استخدام RewriteCond وRewriteRule مثل هذا:

RewriteCond %{HTTP_HOST} example.org
RewriteRule default.asp?id=1 http://www.example.org/newpage.html [NC,L,R=301]
...

بعبارة أخرى:أريد إجراء إعادة توجيه صفحة تلو الأخرى من المستند إلى المعرف إلى المستند إلى الاسم المستعار مع دمج ثلاثة مواقع/مجالات في موقع واحد.

آمل أن يكون هناك حل مفيد.شكرا لك مقدما!

هل كانت مفيدة؟

المحلول

Redirect التوجيه يعمل فقط مع < وأ href = "http://httpd.apache.org/docs/2.2/mod/directive-dict.html#Syntax" يختلط = "نوفولو noreferrer"> مسار URL لكن لا المضيف أو الاستعلام من URL .

ولكن من الممكن مع mod_rewrite و:

RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} =id=1
RewriteRule ^default\.asp$ http://www.example.org/newpage.html [NC,L,R=301]

وكما سبق وقال في التعليقات، يمكنك استخدام كتابة خريطة عن رسم الخرائط ID-إلى-الاسم المستعار:

1 foo-page
2 bar-page
3 baz-page
…

والإعلان RewriteMap (هنا ملف نص عادي بسيط):

RewriteMap id-to-alias txt:/absolute/file/system/path/to/id-to-alias.txt

وأخيرا التطبيق:

RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)id=([0-9]+)&?([^&].*)?$
RewriteCond ${id-to-alias:%3}&%1%4 ^([^&]+)&(.*)
RewriteRule ^default\.asp$ http://www.example.org/%1.html?%2 [NC,L,R=301]

وهذا ينبغي أيضا الحافظ الاستعلام المتبقية. إذا كنت لا تريد أن:

RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)id=([0-9]+)&?([^&].*)?$
RewriteCond ${id-to-alias:%3} .+
RewriteRule ^default\.asp$ http://www.example.org/%0.html? [NC,L,R=301]

نصائح أخرى

وثمة بديل جيد لmod_rewrite وهو استخدام كل ما اللغة التي هي أكثر ارتياحا ووضع المنطق في السيناريو الخاص بك. وتشير جميع عناوين URL التي ترغب في إعادة توجيه إلى وحدة تحكم الأمامي بسيط الخاص بك.

RewriteRule ^default.asp$ /redirect.php [L]
RewriteRule ^another/path/to_some_file.ext$ /redirect.php [L]

وبعد ذلك، في redirect.php:

<?php
if ($_SERVER['SCRIPT_URL'] == '/default.asp'){
    $map = array(
        1 => '/newpage.html',
        2 => '/contact.html'
    );
    if (isset($_GET['id'])){
        $id = $_GET['id'];
        if (isset($map[$id])){
            header('HTTP/1.1 301 Moved Permanently', true, 301);
            header('Location: http://'.$_SERVER['HTTP_HOST'].$map[$id]);
            exit;
        }
    }
}
// ... handle another/path/to_some_file.ext here, or other domains, or whatever ...

// If we get here, it's an invalid URL
header('HTTP/1.1 404 Not Found', true, 404);
echo '<h1>HTTP/1.1 404 Not Found</h1>';
echo '<p>The page you requested could not be found.</p>';
exit;
?>

مجرد إضافة بعض مزيد من المعلومات

من المحتمل أن تكون توجيهات إعادة توجيه OP بتنسيق خاطئ - من مستند Apache ذي الصلة صفحة:

يعين أمر إعادة التوجيه عنوان URL قديما إلى واحدة جديدة عن طريق مطالبة العميل إعادة جلب المورد في الجديد مكان.

مسار عنوان URL القديم حساس لحالة الأحرف مسار (٪ - فك التشفير) بدءا من القطع.المسار النسبي ليس كذلك سمح.يجب أن يكون عنوان URL الجديد عنوان URL المطلق الذي يبدأ بمخطط واسم المضيف.مثال:

Redirect /service http://foo2.bar.com/service

وهذا من شأنه أن يجعل الأمر:

Redirect 301 /default.asp?id=1 http://www.example.org/newpage.html

امل ان يساعد

في httpd.conf:

وRedirectPermananent URL1 URL2

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