PDA

View Full Version : مشکلی و سوالی در مورد RewriteRule و ساخت url کوتاه



barnamenevis2016
یک شنبه 04 مرداد 1394, 17:16 عصر
سلام....من یکم گیج شدم. به چند تا منبع هم سر زدم...باز مدام توی تست ها با خطا مواجه می شم....ممنون اگر کسی کد مورد نظرم رو بده...من می خوام فایل .htaccess رو برنامه بریزم که آدرس های پروفایل کاربری کوتاه و تمیز نشون داده بشه.مثلا به جای آدرس زیر:

www.site.com/profile.php?member=زهرا&r=mm

آدرس زیر رو داشته باشم:

www.site.com/زهرا?r=mm
خواهشن کد مورد نظر رو بگید چطور نوشته می شه.من از یک کد زیر استفاده کردم که می آد اگر اشتب نکنم آدرسی در غالب www.site.com/admin (http://www.site.com/admin) رو می خونه و اگر فایلی مشابه برای اون نداشت.ارجاع می ده به آدرس پروفایل در حالی متغیر get برای اون مساوی admin هست:
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^(.*)$ profile.php?member=$1


یکی از باگ ها و یا خطا های کد بالا این بود که اگر یک اسلش به انتهای آدرس اضافه می کردم و آدرس رو به این شکل مثلا می نوشتم:


www.site.com/admin/
اونوفت به متغیر $_GET['member']
مقدار admin/ منتصب می شد که مشکلاتی بوجود می آورد.که این مشکل اسلش رو هم اگر می شه راه چارش رو بگید.متاسفانه من زبانم افتضاحه وگرنه منابع انگلیسی برای این سوالاتم فکر می کنم موجود بود.پس خواهش منو ارجاع ندید به منابع خارجی.
اگر می شه چیزی که خودتون تست کردید و بدون اشکال جواب گرفتید رو بیان کنید...

H:Shojaei
یک شنبه 04 مرداد 1394, 21:40 عصر
من از این کد استفاده میکنم همیشه...


Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !.*\.css$ [NC]
RewriteCond %{REQUEST_URI} !.*\.js$ [NC]


RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteCond %{REQUEST_FILENAME} !-l [NC]
RewriteRule ^(.*)$ index.php?params=$1 [L,QSA]

c0mmander
یک شنبه 04 مرداد 1394, 22:30 عصر
من از این کد استفاده میکنم همیشه...


Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !.*\.css$ [NC]
RewriteCond %{REQUEST_URI} !.*\.js$ [NC]


RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteCond %{REQUEST_FILENAME} !-l [NC]
RewriteRule ^(.*)$ index.php?params=$1 [L,QSA]

داخل این حالت مدیریت اصلی داخل index.php انجام میشه ... اگر میشه یک مثال هم از نحوه کار اون اون فایل بزن چون درسته که پارامتر به index ارجاع میشه اما چطور قرار آدرس ها بصورت دلخواه تغییر کنه

H:Shojaei
دوشنبه 05 مرداد 1394, 10:51 صبح
بله درسته همه پارامترها به ایندکس ارسال میشن (من با / پارامتر ها رو جدا میکنم به این صورت مثلا /p1/p2/p3) و شما باید اونجا مدیریتشون کنید مثلا من همیشه چک میکنم اگر اولین مقدار فایلی (مثلا اینجا p1) با این نام وجود داشت اونو لود کنه و پارامتر ها به اون ارسال میشن اگر نه هم که صفحه اصلی میاد...


function loadPage($page,$header){ $page1=explode('/', @$_GET['params']); $params=$page1; if($header==1) { include_once 'home.php'; } else include_once $page;}if(isset($_GET['params']) AND !empty($_GET['params'])){ //echo $_GET['params'].'<br>'; $page=explode('/', $_GET['params']); $params=$page; $page = $page[0]; if(file_exists($page.'.php')) { loadPage($page.'.php',0); } else { loadPage('index.php',1); }}else{ //echo "ldpate get empty"; loadPage('home.php',1);}

phpdev
دوشنبه 05 مرداد 1394, 10:57 صبح
اینو ببین شاید به دردت بخور (http://barnamenevis.org/showthread.php?501359-%D9%85%D8%B4%DA%A9%D9%84-%D8%A7%D8%B3%D8%A7%D8%B3%DB%8C-%D8%A8%D8%A7-htaccess)ه:لبخندساده: