PDA

View Full Version : چطور لینک صفحات را در adress bar مخفی کنیم؟



raspotineiran
دوشنبه 19 اسفند 1387, 07:14 صبح
سلام
فرض کنید در صفحه اصلی سایت www.mysite.com روی لینک about.html کلیک شود در حالت معمول در ادرس بار این ادرس بنمایش در میاد: www.mysite.com/about.html

حال برای اینکه در صورت کلیک روی about.html ادرس مسیر این صفحه در ادرس بار نمایش داده نشود و ادرس صحه اصلی هنوز دیده شود(در صورتیکه ما در www.mysite.com/about.html باشیم )

یک راه اینست که از iframe و frameset استفاده کنیم.
میخوام بپرسم ایا کدی برای این منظور مخفی سازی میشناسید تا از iframe استفاده نکنیم؟
جایی دیدم ولی یادم نیست کجا بود روی لینکها کلیک می کردم صفحه باز مشد ولی ادرس در ادرس بار میشد مثلا:
www.mysite.com/#

Unique
دوشنبه 19 اسفند 1387, 20:34 عصر
سلام

من نمیدونم چرا میخوای این کار را انجام بدی !! برای امنیت ؟ کلاس ؟ با ...؟

به هر حال سمت کلاینت من ندیدم این کار را انجام بدهند و جالبه اگه کسی بدونه چطور !
اما یه تکنیکی وجود داره به نام URL Rewriting که سمت سرور با کمک وب سرور(Apache یا IIS) آدرس url را به url اصلی تبدیل میکنه !

اما این کار نه برای کلاس هست و نه امنیت ! این کار بیشتر به درد این میخوره که شما url های user friendly ایجاد کنید مثلا :

http://www.mysite.com/movies/Se7en که با استفاده از url rewrting به یک صفحه دیگه لینک میشه !

raspotineiran
چهارشنبه 21 اسفند 1387, 04:05 صبح
دوست من اگر خواستم این کار را انجام بدم حمل بر بی کلاسی ان نکنید فقط گفتم شاید با اینکار ادرس بعضی لینکهای طولانی در address bar جمع و جور و کوچکتر دیده شود (فقط domain باشد) اونم فقط برای تجربه و تست کردن همین و بس!
بهر حال از اینکه پاسخ سوال مرا دادی متشکرم.
اینجا هم کل قضیه را توضیح داده:

http://www.willmaster.com/library/tips/URL-masking.php

و اینم یه demo از fix کردن url در address bar با frameset بنام pagefix.html:

http://www.rgagnon.com/examples/pagefix.html
http://www.rgagnon.com/examples/pagea.html
http://www.rgagnon.com/examples/pageb.html

raspotineiran
چهارشنبه 21 اسفند 1387, 05:35 صبح
در ضمن یادم رفت بگم اونیکه دوستمان گفت اسکریپتی هست که لینکهای بزرگ رو کوتاه میکنه بنام
Desi Short URL Script v.1.0
دمو:
http://www.desiscripts.com/demo/URL/index.php
و یه سایت دیگه:
www.i-url.co.cc
و اینم خود اسکریپت:
http://rapidshare.com/files/160474170/i-url.co.cc.zip
و پیوست میکنم .

raspotineiran
جمعه 23 اسفند 1387, 09:06 صبح
برای اینکار بنظرم mod rewrite عبارت منظمی که باید توی htaccess بنویسیم مطمن ترین و پر کاربردترینه .برای فعال سازی این مد -توی فایل htaccess متن زیر کپی پست کنید تا فعال بشه :

<IFMODULE mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) web.php
</IFMODULE>

البته باید نحوه استفاده mod هم در اسکریپت یا صفحات و ...... اعمال شود برای اطلاعات بیشتر میتونید به فروم پشتیبانی این مد از طریق آدرس : http://forum.modrewrite.com برید.
اینجا هم کمی آموزش داده : http://www.rankinglabs.com/Mod_Rewrite

raspotineiran
جمعه 07 فروردین 1388, 02:38 صبح
گفتیم که بنا به دلايل بسياري شما نياز خواهيد داشت تا URL هاي صفحات وب سايت خود را بازنويسي كنيد. اين كار ميتواند براي سادگي و روان بودن URL ها بوي‍‍ژه URL هاي پر استفاده صورت بگيرد.
همچنين ممكن بنا به دلايل امنيتي نخواهد كاربران از نام صفحات و يا تكنولوژي سمت سروري كه از آن استفاده ميكنيد مطلع گردند.
مثلا به جاي داشتن چنين URL‌اي

http://example.com/index.php?act=news&code=view&id=3
بسيار ساده تر و جالب تر است اگر آن را بتوانيم به اين صورت در آوريم و استفاده كنيم :

http://example.com/news/view/1/

و يا حتي به اين شكل

http://example.com/news/view/1.html

اين كار در PHP به كمك يك تابع به نام mod_rewrite صورت ميگيرد و ميتواند URL ها را به صورت خودكار بازنويسي كند. البته شما ميتوانيد به كمك آن كاربر را به صفحه ديگر هدايت نماييد يا اين كه صفحات را به صورت پويا ايجاد كنيد.
مثال زير را در نظر بگيرد

RewriteEngine On
RewriteRule ^news/view/(.*).html$ index.php?act=news&code=view&id=$1
كد بالا در فايل .htaccess قرار داده شده است و كاري كه ميكند اين است كه موتور بازنويسي را فعال كرده و به آن ميگوييم كه بر اساس قاعده اي كه تعريف كرده ايم URL را بازنويسي كند.
البته mod_rewrite از regex براي عبارات قاعده بازنويسي اش استفاده ميكند:
^ به معناي آغاز جستجو و $ به معناي پايان آن است
(.*) به معنای جستجو برای 0 یا چند کاراکتر است.
برای هر پارامتری که اضافه میکنید میتوانید از یک متغیر $ استفاده نمایید و از آنجایی که ما فقط یک مورد (.*) داریم از $1 استفاده میکنیم.
سپس باید .html را نادیده بگیریم چرا که نقطه یک کلمه کلیدی در regex میباشد. قاعده بازنویسی بالا برای همه کاراکترها است و نه فقط کاراکترهای عددی و رشته ای. اما اگر بخواهیم آن را فقط به صورت عددی در آوریم :

RewriteRule ^news/view/([0-9]+).html$ index.php?act=news&code=view&id=$1

بنابراین این قاعده فقط زمانی اعمال میشود که اولین پارامتر عددی باشد و 1 کاراکتر یا بیشتر داشته باشد. چنانچه یک ورودی غیرعددی داده شود خطای 404 رخ خواهد داد مثلا URL زیر نامعتبر است و باعث بروز خطای 404 خواهد شد:

http://example.com/news/view/fdjghdfjkg.html

به منظور ایجاد URL های کاربر پسند برای همه سیستم وب سایت خود شما میبایست خطوط جدیدی نیز اضافه کنید که گاها کار دشواری است.اما آنچه که ما در اینجا معرفی میکنیم کار را بسیار ساده میکند. یک سیستم PHP که به شما اجاره میدهد پارامترهای نامحدودی را در URL خود داشتهب اشد بدون اینکه مجبور باشید از قواعد چند خطی بازنویسی URL استفاده نمایید.
تابعی به نام setInput() را در نظر بگیرید که همه داده های mod_rewritten را در $_GET قرار میدهد. ما از چنین تابعی استفاده خواهیم کرد. بنابراین باید کد زیر به فایل .htaccess اضافه شود.

RewriteEngine On
RewriteRule ^(.*).html$ index.php?string=$1

کاری که این کد انجام میدهد این است که مثلا عبارت:

http://example.com/news/view/my-title.html

را در واقع به آدرس زیر میفرستد:

http://example.com/index.php?string=news/view/my-titl

در اینجا ما میباید:
1- $_GET['string'] را به توجه به کاراکتر / تکه تکه کنیم تا آرایه ای از داده ها داشته باشم
2- یک سیستم کلید/مقدار داشته باشیم که بتوانیم داده ها را توسط آن بیان کنیم
3- اولین پارامترمان را بعنوان عمل تعریف کنیم
4- $_GET را خالی کرده و همه آرایه را در $_GET قرار دهیم.
بنابراین از تابعی با این ساختار استافده میکنیم

function setInput()
{
}

قدم اول تکه تکه کردن رشته $_GET میباشد:

$input = explode( '/', $_GET['string'] );
We explode it with the directory seperator character.
Next up we have to assign a value to a key.
We'll use the for() loop to loop through our array.
for( $i = 0; $i < count( $input ); $i++ )
{
if( $i != 0 )
{
$input_array[ $input[ $i ] ] = $input[ $i + 1 ];
$i++;
}
}


دقت داشته باشید که درون حلقه تکرار for چک میکنیم که $input اولین پارامتر نباشد و در نهایت مقدار را در آرایه ای دیگر میریزیم به این ترتیب که کلید برابر محتوای پارامتر $I فعلی است و مقدار برابر محتوای $i بعدی.

$input_array['act'] = $input[0];

کاری که اینجا انجام میدهیم قراردادن کلید اولین پارامتر برای عمل است. یعنی مثلا در عبارت :

http://example.com/news.html
کلید عمل برابر news است.

foreach( $input_array as $k => $v )
{
if( $v != '' )
{
$newinput[ $k ] = $v;
}
}
$input_array = $newinput;
البته در برخی شرایط شاید بهتر باشد پارامترهای خالی را حذف کنیم البته این کار اجباری نیست:

unset( $_GET );
$_GET = $input_array;
پس در نهایت چنین بگوییم که ما مقدار پارامترهای $_GET را درآورده و در یک آرایه جدید ریخته ایم و کد کامل تابعی که نوشته ایم به این شکل میباشد:

function setInput( $var = '' )
{
$input = explode( '/', $_GET['string'] );
for( $i = 0; $i < count( $input ); $i++ )
{
if( $i != 0 )
{
$input_array[ $input[ $i ] ] = $input[ $i + 1 ];
$i++;
}
}
$input_array['act'] = $input[0];
unset( $_GET );
$_GET = $input_array;
}
?>

متشکرم.