View Full Version : short url ها چطور کار میکنند ؟ مانند http://instagram.com/p/example
haniiii
دوشنبه 13 مرداد 1393, 17:29 عصر
سلام
نمیدونم سوالم رو جای درستی پرسیدم یا نه ...
این نوع آدرس ها چطوری کار میکنند ؟ : http://instagram.com/p/example
تو مورد بنده داده ها در یه table ذخیره شدند و اون قسمت example استرینگی هست که id مربوط به سطر مربوطه رو مشخص میکنه ... چطوری باید این رو پیاده سازی کنم ؟
نمیخوام از url های این شکلی استفاده کنم :
/a.php?r=example
ممنون میشم راهنمایی کنید
aalmair
دوشنبه 13 مرداد 1393, 18: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, 19: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, 19:43 عصر
هم با mvc میتونی هم با .htaccess بستگی به پروژت داره
haniiii
دوشنبه 13 مرداد 1393, 20:17 عصر
هم با mvc میتونی هم با .htaccess بستگی به پروژت داره
تفاوتشون چیه ؟ ...
***BiDaK***
دوشنبه 13 مرداد 1393, 21:02 عصر
تفاوتشون چیه ؟ ...
mvc یک معماریه و واسه ساخت این نوع لینکها بازم از htaccess استفاده میکنه.
فلگ NC یعنی به حروف کوچک و بزرگ حساس نباشه و فلگ L یعنی last , اگه روله دیگه ای بعد خودش بیاد پردازش نمیکنه.
Mohammadsgh
دوشنبه 13 مرداد 1393, 21:10 عصر
با .htaccess تو پروژه معمولی میتونید استفاده کنید ولی با mvc حتما باید پروژتون با معماری mvc باشه که تو اوت یک فایلی به نام bootstrap.php یو آر ال ها رو اونجوری میکنه
***BiDaK***
دوشنبه 13 مرداد 1393, 21:18 عصر
با .htaccess تو پروژه معمولی میتونید استفاده کنید ولی با mvc حتما باید پروژتون با معماری mvc باشه که تو اوت یک فایلی به نام bootstrap.php یو آر ال ها رو اونجوری میکنه
با فایل بوتسرپ mvc ارتباطی نداره.mvc هم با htaccess پارامترارو میگیره.
Mohammadsgh
دوشنبه 13 مرداد 1393, 23:21 عصر
پارامتر رو میگیره با چی url رو اونجوری میکنه؟
***BiDaK***
سه شنبه 14 مرداد 1393, 01:35 صبح
متغیری که تعیین میکنی یک ارایه است.مثلا تو همین مثال r رو اگه در نظر بگیری با print_r مقدار با گت r رو چاپ کن.
و با explode جداشون میکنی.
فایل های پروژت htaccess اشو ببین.
Louai_M
چهارشنبه 04 آذر 1394, 19: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, 20: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, 19:04 عصر
با .htaccess تو پروژه معمولی میتونید استفاده کنید ولی با mvc حتما باید پروژتون با معماری mvc باشه که تو اوت یک فایلی به نام bootstrap.php یو آر ال ها رو اونجوری میکنه
ربطی به شیوه برنامه نویسی نداره (MVC,HMVC,Flat code) نداره . توی .htaccess و استفاده از قابلیتهای سرور آپاچی انجام میشه و ربطی به php نداره.
Louai_M
جمعه 06 آذر 1394, 20:21 عصر
هر کاری کردم نشد تمام کد های که بالا گفته بودید استفده کردم ولی میزنه صفحه ای یافت نشد
من چون از mvc استفاده می کنم فایل htaccess جفت فایل index.php هست و صفحه pr که قصد تغییر آدرس اتصال به اون رو دارم درون views/index/pr.php هست (جهت اطلاع)
arta.nasiri
جمعه 06 آذر 1394, 21:57 عصر
هر کاری کردم نشد تمام کد های که بالا گفته بودید استفده کردم ولی میزنه صفحه ای یافت نشد
من چون از mvc استفاده می کنم فایل htaccess جفت فایل index.php هست و صفحه pr که قصد تغییر آدرس اتصال به اون رو دارم درون views/index/pr.php هست (جهت اطلاع)
واسه معماری mvc بهتره همه درخواستها رو به index.php ارسال کنید، سپس با پردازش url میتونید عملیات routing رو انجام بدید. پیشنهاد من اینه که ساختار یکی از فریم ورکها مثل yii رو بررسی کنید تا درک بهتری از موضوع داشته باشید.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.