Redirection

۱۶ بهمن ، ۱۳۹۷

وقتی آدرس سایت ما تغییر می کند و ما نیاز داریم تا کاربرانی که سایت قدیمی را مشاهده میکردند اکنون به سایت جدید هدایت شوند باید تغییراتی به وجود آوریم تا وقتی حتی آدرس قدیمی سایت را جستجو می کنند به سایت جدید منتقل شوند برای اینکار به redirection نیاز داریم که در ادامه به تحلیل و بررسی آن میپردازیم .

کمی درباره Http Response Code ها بدانیم

هر بار که ما یک URL را در یک مرورگر وارد میکنیم تا درخواستی کنیم از( Hypertext Transfer Protocol ( HTTP استفاده میکنیم. این دقیقا فرآیندی هست که ما از سرور Css ، Html و یا عکس ها را درخواست میکنیم. بعد از اینکه ما درخواستی را ارسال کردیم با استفاده از این ابزار پاسخی دریافت میکنیم که این پاسخ ها به صورت کد میباشند و هر کدام معنایی دارند به عنوان مثال برای جواب “همه چیز مرتب و درست است” کد پاسخ ۲۰۰ را دریافت میکنیم .

کد‌های پاسخ بسیاری وجود دارند که ممکن است برای شما آشناترین آنها کد 404 Not Found باشد .

همه پاسخ‌های HTTP به صورت یک عدد ۳ رقمی مشخص دسته‌ بندی میشوند برای همین مثلا 404 Not Found در دسته 4XX میباشد که نشان میدهد مشکل از سمت client است و کد 200 در دسته 2XX نشان دهنده موفقیت آمیز بودن است. ما در این قسمت به کدهای دسته 3XX نیاز داریم مثل 301 Moved Permanently یا 302 Found به این دلیل که این کدها به طور ویژه برای redirect ها هستند .

ما در اینجا از کد 301 استفاده میکنیم زیرا مرورگرها و سرورهای پروکسی این مورد را ذخیره و صفحه قدیمی را غیرقابل دسترس میکنند و این دقیقا چیزی است که ما نیاز داریم .

با ما همراه باشید تا به تحلیل راه های ارجاع بپردازیم:

راه اول :‌ HTML Redirects

ساده ترین راه ممکن میتواند متاتگ refresh باشد زیرا کافیست تا متاتگ :

<meta http-equiv="refresh" content="0; URL='https://hinzaco.com'" />

را در قسمت همه صفحه های Html قرار دهیم.

در قسمت URL باید آدرس سایتی که میخواهید کاربر به آن منتقل شود را وارد کنید.

متغیر content برای این میباشد که شما میخواهید بعد از چه زمانی به صفحه جدید منتقل شوید. اگرچه این راه میتواند ساده باشد اما معایبی نیز دارد به عنوان مثال ممکن است کاربران قبل از منتقل شدن به صفحه جدید یک دید سریع از سایت قبلی ببینند و یا در مرورگرهای قدیمی باعث غیرفعال شدن دکمه بازگشت شوند و به نظر خیلی راه خوب و فوق العاده ای نمیباشد .

راه دوم ‌: JavaScript Redirects

redirect به صفحه ای دیگر با JavaScript بسیار ساده میباشد تنها کافیست تا location آبجکت window را تغییر دهیم :

window.location = "https://hinzaco.com";

و برای انجام اینکار در JavaScript راه های بسیاری وجود دارد :

window.location = "https://hinzaco.com";

window.location.href = "https://hinzaco.com";

window.location.assign("https://hinzaco.com");

window.location.replace("https://hinzaco.com");

با آبجکت location ما میتوانیم بسیار کارهای بهتری مانند reload کردن صفحه یا عوض کردن path و origin آدرس url نیز بکنیم .

اما چند مشکل در این قسمت وجود دارد :

۱. JavaScript باید برای این کار دانلود و اجرا شود.

۲. به طور واضح معلوم نیست که مرورگرها چه واکنشی به آن نشان میدهند.

۳. هیچ status کدی در این قسمت دیده نمیشود بنابراین نمیتوانید روی اطلاعات تکیه کنید.

چیزی که ما نیاز داریم یک راه حل سمت سرور میباشد تا به ما کمک کند response کد 301 برای مرورگرها و موتورهای جستجو ارسال کنیم.

راه سوم : Apache Redirects

شاید متداول ترین راه ممکن برای redirect کردن یک صفحه اضافه کردن بعضی قوانین خاص به فایل “ .htaccess ”روی سرور Apache باشد.

“ .htaccess ”فایلی میباشد که به ما قابلیت دستور دادن به Apache را میدهد . برای استفاده از این مورد باید در قسمت root directory سرور سایت قدیمی یک فایل . htaccess بسازید ( و یا فایل موجود را ویرایش کنید ) و این کد را به آن اضافه کنید :

Redirect 301 / http://www.new-website.com

با وارد کردن این کد تمام صفحه هایی که در سایت قدیم وجود داشتند به سایت جدید منتقل میشوند و ما کد response 301 هم وارد کردیم که در بالا درباره این کد ها توضیح داده شده است.

و اینگونه redirect وقتی ارزش دارد که سرور لینوکسی به همراه mod_rewrite فعال باشد.

اگر کاربر با کد بالا اقدام به جستجوی old-website.com/blog/post کند به new-website.com فرستاده میشود و این خیلی کاربر پسند نمی باشد زیرا کاربر آن صفحه ای که درخواست کرده است را مشاهده نمی کند. به جای آن ما تکه کد پایین را وارد می کنیم تا کاربر دقیقا بتواند تمام صفحه های blog را ببیند :‌

RedirectMatch 301 /blog(.*)  http://www.new-website.com$1

شاید بخواهیم صفحه های تکی را به طور ویژه منتقل کنیم بنابراین میتوانیم کدی مانند زیر را وارد کنیم :

Redirect 301 /page.html  http://www.old-website.com/new-page.html

و یا برای ارور ها به صفحه ۴۰۴ انتقالشان بدهیم:

 

     RewriteEngine on

     RewriteCond   %{REQUEST_FILENAME} !-f

     RewriteCond   %{REQUEST_FILENAME} !-d

     RewriteRule .*  404.html [L]

 

ابتدا چک می کنیم تا ببینیم آیا ماژول mod_rewrite را داریم و اگر داشتیم آن را فعال میکنیم و اگر فایل و یا directory پیدا نشد میتوانیم او را به صفحه ۴۰۴ انتقال دهیم.

اگر با کار کردن با “ .htaccess ”راحت نبودید و WordPress را نصب داشتید میتوانید از a nifty extension استفاده کنید.

راه چهارم : Nginx Redirects

اگر سرور شما روی Nginx اجرا میشود میتوانید در فایل “nginx.conf” موارد زیر را اضافه کنید:

server {
listen 80;
server_name old-website.com;
return 301 $scheme://new-website.com$request_uri;
}

دوباره از کد ۳۰۱ استفاده میکنیم و با متغیر Scheme ، http یا https درخواست میکنیم ( بستگی به چیزی که سایت استفاده میکند دارد ). میتوانید برای بهتر عمل کردن نگاهی به HTML5 Boilerplate nginx.conf بیندازید.

راه پنجم : Lighttpd redirects

برای سرورهایی که از Lighttpd استفاده میکنند با درست کردن یک mod_redirect و استفاده از url.redirect ریدایرکت درست میکنیم:

server.modules = (
"mod_redirect"
)
$HTTP["host"] =~ "^(www\.)?old-website.com$" {
url.redirect = (
"^/(.*)$" => "http://www.new-website.com/$1",
)
}

راه ششم : Php Redirects

با استفاده از php میتوانیم به صورت ساده و مستقیم از تابع header استفاده کنیم :

header(‘Location: http://www.new-website.com’);
exit;
?>

این کد باید قبل از هر کد دیگری قرار بگیرد. در اینجا یک مشکل کوچک وجود دارد و آن این است که این تابع به طور پیش‌ فرض کد ۳۰۲ را ارسال میکند که میگوید محتوا به طور موقتی به سایت جدید انتقال یافته است با توجه به خواسته‌ ای که ما داریم میخواهیم فایل‌ ها به طور دائمی به سایت جدید منتقل شوند بنابراین کد را به صورت زیر تغییر میدهیم:

header(‘Location: http://www.new-website.com’,true,301);
exit;
?>

راه هفتم : Ruby on rails Redirects

در هر کنترلری در پروژه Rails ما میتوانیم به طور سریع به سایت جدید با استفاده از redirect_to و :status باید روی :moved_permanently ست شود با این کار کد ۳۰۲ پیش‌فرض را با Moved Permanently جایگزین میکنیم:

class WelcomeController < ApplicationController
def index
redirect_to 'http://new-website.com', :status => :moved_permanently
end
end

در Rails 4 راه ساده‌ تری برای این کار وجود دارد ما میتوانیم redirect را در routes.rb اضافه کنیم که به طور خودکار کد ۳۰۱ را هم ارسال میکند: 

get "/blog" => redirect("http://new-website.com")

و یا اگر میخواهیم همه مقالات این بلاگ را به پست‌ های سایت جدید ارجاع بدهیم میتوانیم این کد را جایگزین کنیم:

get "/blog/:post" => redirect("http://new-website.com/blog/%{post}")

راه هشتم : .Net Redirects

در قسمت Microsoft's Developer Network مقاله واضحی درباره این موضوع ذکر شده است.

راه نهم : Node.js Redirects

ابتدا ماژول http را اضافه میکنیم و یک سرور درست میکنیم و با استفاده از (writeHead) کار را ادامه میدهیم:

var http = require(“http”);
http.createServer(function(req,res)){
res.writeHead(301,{Location: ‘http://new-website.com’});
res.end();
}).listen(8888);

اگر یک فایل جدید به اسم index.js بسازید و کد بالا را در آن قرار دهید و آن را اجرا کنید یک نسخه local از سایت که به new-website.com ارجاع داده میشود میبینید. اما برای اینکه همه پست ها در /blog ارجاع داده شوند باید URL را از درخواست parse  کنیم اینکار را با ماژول url انجام میدهیم به صورت زیر:

var http = require(“http”);

var url = require(“url”);

http.createServer(function(req,res)){

var pathname = url.parse(req,url).pathname;

res.writeHead(301,{Location: ‘http://new-website.com’ + pathname});

res.end();

}).listen(8888);

با استفاده از تابع .(writeHead) میتوانیم pathname دریافت شده از request را به آخر URL اضافه کنیم ، حال به آدرس متناظر در سایت جدید ارجاع داده میشود.

راه دهم : Flask Redirects

با استفاده از فریمورک Flask در پایتون میتوانیم یک route ایجاد کنیم و با استفاده از تابع redirect و اینبار نیز با پاس دادن کد ۳۰۱ به این تابع به به جای کد پیش فرض ۳۰۲ یک redirect بسازیم:

@app.route(‘/notes/’)
def thing(page):
return redirect("http://www.new-website.com/blog/" + page, code=301)


میانگین آرا:
96% (5 نفر)
رای دهید:
مقالات مرتبط
مشاهده بیشتر...