PDA

View Full Version : short url ها چطور کار میکنند ؟‌ مانند http://instagram.com/p/example



haniiii
دوشنبه 13 مرداد 1393, 16:29 عصر
سلام

نمیدونم سوالم رو جای درستی پرسیدم یا نه ...

این نوع آدرس ها چطوری کار میکنند ؟‌ : http://instagram.com/p/example

تو مورد بنده داده ها در یه table ذخیره شدند و اون قسمت example استرینگی هست که id مربوط به سطر مربوطه رو مشخص میکنه ... چطوری باید این رو پیاده سازی کنم ؟‌

نمیخوام از url های این شکلی استفاده کنم :‌

/a.php?r=example

ممنون میشم راهنمایی کنید

aalmair
دوشنبه 13 مرداد 1393, 17:58 عصر
برای این کار باید از دستورات سرویس دهنده ی وب استفاده کنی
اگه سرویس دهنده ات آپاچی است در ریشه سایت یک فایل .htaccess بساز و داخل اون از دستورات rewrite rule آپاچی استفاده کن البته توجه داشته باش که rewrite module فعال باشه





RewriteEngine On

RewriteRule p/([a-zA-Z0-9_]*)$ a.php?r=$1 [NC,L]




در دستورات بالا الگو ی شما در قسمت اول و به صورت عبارات منظم نوشته شده و برای پردازش در قسمت دوم فایل a.php ورودی را پردازش می کند

arashcart (https://goo.gl/1lXQhj)

haniiii
دوشنبه 13 مرداد 1393, 18:28 عصر
برای این کار باید از دستورات سرویس دهنده ی وب استفاده کنی
اگه سرویس دهنده ات آپاچی است در ریشه سایت یک فایل .htaccess بساز و داخل اون از دستورات rewrite rule آپاچی استفاده کن البته توجه داشته باش که rewrite module فعال باشه





RewriteEngine On

RewriteRule p/([a-zA-Z0-9_]*)$ a.php?r=$1 [NC,L]




در دستورات بالا الگو ی شما در قسمت اول و به صورت عبارات منظم نوشته شده و برای پردازش در قسمت دوم فایل a.php ورودی را پردازش می کند


خیلی ممنون عالیه ... کار میکنه :)
فقط من هنوز نمیدونم اسم این کاری که انجام میدم چی هست ؟‌ به انگلیسی چی میگن به این کار ؟‌ :))
و اون [NC,L] برای چی هست ؟‌

مرسی

Mohammadsgh
دوشنبه 13 مرداد 1393, 18:43 عصر
هم با mvc میتونی هم با .htaccess بستگی به پروژت داره

haniiii
دوشنبه 13 مرداد 1393, 19:17 عصر
هم با mvc میتونی هم با .htaccess بستگی به پروژت داره

تفاوتشون چیه ؟ ...

***BiDaK***
دوشنبه 13 مرداد 1393, 20:02 عصر
تفاوتشون چیه ؟ ...
mvc یک معماریه و واسه ساخت این نوع لینکها بازم از htaccess استفاده میکنه.
فلگ NC یعنی به حروف کوچک و بزرگ حساس نباشه و فلگ L یعنی last , اگه روله دیگه ای بعد خودش بیاد پردازش نمیکنه.

Mohammadsgh
دوشنبه 13 مرداد 1393, 20:10 عصر
با .htaccess تو پروژه معمولی میتونید استفاده کنید ولی با mvc حتما باید پروژتون با معماری mvc باشه که تو اوت یک فایلی به نام bootstrap.php یو آر ال ها رو اونجوری میکنه

***BiDaK***
دوشنبه 13 مرداد 1393, 20:18 عصر
با .htaccess تو پروژه معمولی میتونید استفاده کنید ولی با mvc حتما باید پروژتون با معماری mvc باشه که تو اوت یک فایلی به نام bootstrap.php یو آر ال ها رو اونجوری میکنه
با فایل بوتسرپ mvc ارتباطی نداره.mvc هم با htaccess پارامترارو میگیره.

Mohammadsgh
دوشنبه 13 مرداد 1393, 22:21 عصر
پارامتر رو میگیره با چی url رو اونجوری میکنه؟

***BiDaK***
سه شنبه 14 مرداد 1393, 00:35 صبح
متغیری که تعیین میکنی یک ارایه است.مثلا تو همین مثال r رو اگه در نظر بگیری با print_r مقدار با گت r رو چاپ کن.
و با explode جداشون میکنی.
فایل های پروژت htaccess اشو ببین.

Louai_M
چهارشنبه 04 آذر 1394, 18:54 عصر
با سلام دوستان من کدی که گفته بودید را در فایل htaccess نوشتم ولی اجرا نمیشه چون از mvc استفاده می کنم

کد htaccess


php_flag display_errors on
php_value error_reporting 9999

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
RewriteRule post/([a-zA-Z0-9_]*)$ pr?id=$1 [NC,L]


Options -Indexes


کد فایل bootstrap



<?php

class Bootstrap {

private $_url = null;
private $_controller = null;

private $_controllerPath = 'app/controllers/'; // Always include trailing slash
//private $_modelPath = 'app/models/'; // Always include trailing slash
private $_errorFile = 'error.php';
private $_defaultFile = 'index.php';

/**
* Starts the Bootstrap
*
* @return boolean
*/
public function init()
{
// Sets the protected $_url
$this->_getUrl();

// Load the default controller if no URL is set
// eg: Visit http://localhost it loads Default Controller
if (empty($this->_url[0])) {
$this->_loadDefaultController();
return false;
}

$this->_loadExistingController();
$this->_callControllerMethod();
}

/**
* (Optional) Set a custom path to controllers
* @param string $path
*/
public function setControllerPath($path)
{
$this->_controllerPath = trim($path, '/') . '/';
}

/**
* (Optional) Set a custom path to models
* @param string $path
*/
/*public function setModelPath($path)
{
$this->_modelPath = trim($path, '/') . '/';
}*/

/**
* (Optional) Set a custom path to the error file
* @param string $path Use the file name of your controller, eg: error.php
*/
public function setErrorFile($path)
{
$this->_errorFile = trim($path, '/');
}

/**
* (Optional) Set a custom path to the error file
* @param string $path Use the file name of your controller, eg: index.php
*/
public function setDefaultFile($path)
{
$this->_defaultFile = trim($path, '/');
}

/**
* Fetches the $_GET from 'url'
*/
private function _getUrl()
{
$url = isset($_GET['url']) ? $_GET['url'] : null;
$url = rtrim($url, '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
$this->_url = explode('/', $url);
}

/**
* This loads if there is no GET parameter passed
*/
private function _loadDefaultController()
{
require $this->_controllerPath . $this->_defaultFile;
$this->_controller = new Index();
$this->_controller->index();
}

/**
* Load an existing controller if there IS a GET parameter passed
*
* @return boolean|string
*/
private function _loadExistingController()
{
$file = $this->_controllerPath . $this->_url[0] . '.php';

if (file_exists($file)) {
require $file;
$this->_controller = new $this->_url[0];
//$this->_controller->loadModel($this->_url[0], $this->_modelPath);
} else {
$this->_error();
return false;
}
}

/**
* If a method is passed in the GET url paremter
*
* http://localhost/controller/method/(param)/(param)/(param)
* url[0] = Controller
* url[1] = Method
* url[2] = Param
* url[3] = Param
* url[4] = Param
*/
private function _callControllerMethod()
{
$length = count($this->_url);

// Make sure the method we are calling exists
if ($length > 1) {
if (!method_exists($this->_controller, $this->_url[1])) {
$this->_error();
}
}

// Determine what to load
switch ($length) {
case 5:
//Controller->Method(Param1, Param2, Param3)
$this->_controller->{$this->_url[1]}($this->_url[2], $this->_url[3], $this->_url[4]);
break;

case 4:
//Controller->Method(Param1, Param2)
$this->_controller->{$this->_url[1]}($this->_url[2], $this->_url[3]);
break;

case 3:
//Controller->Method(Param1, Param2)
$this->_controller->{$this->_url[1]}($this->_url[2]);
break;

case 2:
//Controller->Method(Param1, Param2)
$this->_controller->{$this->_url[1]}();
break;

default:
$this->_controller->index();
break;
}
}

/**
* Display an error page if nothing exists
*
* @return boolean
*/
private function _error() {
require $this->_controllerPath . $this->_errorFile;
$this->_controller = new Error();
$this->_controller->index();
exit;
}

}


چکار کنم که آدرس های صفحه pr?id=1 هستن یعنی صفحه نمایش مطالب به آدرس pr/post/1 تغییر بکند

با تشکر
نیاز فوری

prg_mail
چهارشنبه 04 آذر 1394, 19:56 عصر
بنظرم راحت ترین روشش htaccess است
سایت خودم اول همش با id بود مثلا
category/1
category/2
category/3
بعد با htaccess
کلا شد فقط نام !

مثلا
site.com/categoryname

اگه mvc استفاده کنی یا نکنی تاثیری از نحوه استفاده htaccess نداره


RewriteRule ^pr/post/1$ /pr?id=1 [L]

j_naroogha@yahoo.com
پنج شنبه 05 آذر 1394, 18:04 عصر
با .htaccess تو پروژه معمولی میتونید استفاده کنید ولی با mvc حتما باید پروژتون با معماری mvc باشه که تو اوت یک فایلی به نام bootstrap.php یو آر ال ها رو اونجوری میکنه

ربطی به شیوه برنامه نویسی نداره (MVC,HMVC,Flat code) نداره . توی .htaccess و استفاده از قابلیتهای سرور آپاچی انجام میشه و ربطی به php نداره.

Louai_M
جمعه 06 آذر 1394, 19:21 عصر
هر کاری کردم نشد تمام کد های که بالا گفته بودید استفده کردم ولی میزنه صفحه ای یافت نشد

من چون از mvc استفاده می کنم فایل htaccess جفت فایل index.php هست و صفحه pr که قصد تغییر آدرس اتصال به اون رو دارم درون views/index/pr.php هست (جهت اطلاع)

arta.nasiri
جمعه 06 آذر 1394, 20:57 عصر
هر کاری کردم نشد تمام کد های که بالا گفته بودید استفده کردم ولی میزنه صفحه ای یافت نشد

من چون از mvc استفاده می کنم فایل htaccess جفت فایل index.php هست و صفحه pr که قصد تغییر آدرس اتصال به اون رو دارم درون views/index/pr.php هست (جهت اطلاع)

واسه معماری mvc بهتره همه درخواستها رو به index.php ارسال کنید، سپس با پردازش url میتونید عملیات routing رو انجام بدید. پیشنهاد من اینه که ساختار یکی از فریم ورکها مثل yii رو بررسی کنید تا درک بهتری از موضوع داشته باشید.