PDA

View Full Version : مشکل با rewrite



majid4
سه شنبه 07 بهمن 1393, 21:04 عصر
سلام

وقتی از مود ریرایت استفاده می کنم محتویات صفحه نشون داده می شه ولی فایل های include شده از جمله css و عکس ها که در ساب دایرکتوری هستند در صفحهه نمی آد

می خواستم ببینم مشکل از کجاس

ممنون

mohamadali1374
سه شنبه 07 بهمن 1393, 21:25 عصر
شما باید آدرس کامل عکس ها و CSS ها رو بدید مثلا برای یه عکس:

<img src="http://www.site/images/image.jpg">

majid4
سه شنبه 07 بهمن 1393, 21:39 عصر
ممنون ولی انگار کلن اشتباه دارم

این کد

if(!isset($_GET['page']) || $_GET['page']=='home')
{
include("home.php");
}
else if($_GET['page']=='about')
{
include("about.php");
}
else if($_GET['page']=='contact')
{
include("contact.php");
}
else if($_GET['page']=='orders')
{
include("orders.php");
}
else if($_GET['page']=='category')
{
include("show_cat.php");
}
else if($_GET['page']=='show_pro')
{
include("show_pro.php");
}
else
{
include("404.php");
}
?>

لطفا ریرایت یکی دوتا از صفحات بالا رو بزارین لطفا
( من تویه ریرایت ها یکم مشکل دارم)
این هارو گذاشتم کار نکرد و آدرس های عکس ها و css ها هم به صورت کاملگذاشتم جواب نداد

RewriteEngine On
#RewriteRule ^([^/]*)/([^/]*)$ /index.php?page=$1&id=$2 [L]
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^(.*)$ /index.php?page=$1 [L]

mohamadali1374
چهارشنبه 08 بهمن 1393, 07:47 صبح
سلام من خودم از کد rewrite زیر استفاده میکنم:
[
RewriteEngine On
RewriteRule ^id/([^/]*)$ /index.php?id=$1 [L]
که به عنوان ورودی(get) یه id میگره این کد درسته و شما اگر آدرس هارو همین طوری که گفتم تغییر بدید نباید مشکل خاصی رو داشته باشه...

سایت زیر هم آدرس هارو میگیره و خودش برات کد ریرایت رو مینویسه :
http://www.generateit.net/mod-rewrite/index.php

majid4
چهارشنبه 08 بهمن 1393, 09:25 صبح
تشکر بابت سایت

کد بالای خودم صفحات رو درست باز می کنه ولی تنها به شرطی که چیزی بعد از آدرس سایت وارد بشه مثل home contact و... ولی وقتی فقط آدرس سایت وارد می شه نمی دونم چجوری دوباره home رو ارسال کنم

mohamadali1374
چهارشنبه 08 بهمن 1393, 10:43 صبح
سلام
نمی دونم منظورتون رو درست متوجه شدم یا نه ...
به هر حال ....
خوب شما در صفحه اول سایتتون(index) بنویسید

$restrictGoTo = "index.php?page=home";
header("Location: ". $restrictGoTo);


این کد باعث میشه سایتتون یه بار دیگه ولی با فرستان page لود بشه ....

majid4
چهارشنبه 08 بهمن 1393, 19:43 عصر
آقا مشکل حل شد ممنون

فقط یه سوال

واسه صفحات من این ریرایت رو استفاده کردم و کار می کنه

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [QSA]

ولی یه سوال واسه یه صفحه خاص که پارامتر می گیره تا خروجی بده باید یه ریرایت جدید تعریف کرد ؟
(مثلا صفحه show_pro باید دوتا پارامتر داشته باشه تا بتونه صفحه رو نشون بده این پارامترها تویه کجا تعریف کنم)

mohamadali1374
چهارشنبه 08 بهمن 1393, 19:49 عصر
بله اگر برای هر کدوم باید جداگانه بنویسید
برای صفحه ای که پارامتری بجز page میگیره باید rewrite جداگانه بنویسید ؛ اون وقت خود htaccess تشخیص میده که از کدوم استفاده کنه

majid4
چهارشنبه 08 بهمن 1393, 20:49 عصر
ممنون محمد جان اگه امکانش هست واسه page
category که یک پارامتر id می گیره ریرایتشو بزار

ممنون

MMSHFE
پنج شنبه 09 بهمن 1393, 10:22 صبح
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)$ show_pro.php?id=$1&page=$2 [L,NC,QSA]
RewriteRule ^(.*)$ index.php?page=$1 [L,NC,QSA]

majid4
پنج شنبه 09 بهمن 1393, 11:00 صبح
ممنون ولی پارامترها فقط به فایل index.php فرستاده می شه مثلا


http://site.ir/index.php?page=show_pro&id=ali

باز هم ممنون از کمکتون

mohamadali1374
پنج شنبه 09 بهمن 1393, 11:47 صبح
خوب مهم نیست من فکر کنم اگه کد رو مثل زیر تغییر دهید مشکل نداشته باشه:
RewriteRule ^([^/]*)/([^/]*)$ index.php?id=$1&page=$2 [L,NC,QSA]
فقط توی صفحه index چک کنید که اگر دو گارانتر id و page فرستاده شد چکاری انجام بده

majid4
پنج شنبه 09 بهمن 1393, 11:54 صبح
گذاشتم متاسقانه جواب نداد

دو تا مشکل پیدا می کنم :
۱ـ فایل های css و عکس ها رو دیگه نمی تونه بشناسه
۲ـ بعد از ارسال پارامتر دوم برای id با خطای ۴۰۴ که تویه index.php تعریف کردم (کدش بالا هست ) رو به رو می شم

----------------------------

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [QSA]

با ریرایت بالا سایت بدون مشکل یک پارامتر رو می گیره و محتویات صفحه رو نشون می ده و هیچ مشکلی هم نداره
---------------------------

فقط توی صفحه index چک کنید که اگر دو گارانتر id و page فرستاده شد چکاری انجام بده

می شه بیشتر توضیح بدین

mohamadali1374
پنج شنبه 09 بهمن 1393, 12:05 عصر
همونطور که گفتم باید چک کنید آیا دو پارامتر فرستاده میشود یانه:

if(isset($_GET['page']) && isset( $_GET['id'] ))
{
کار هایی که باید انجام شود

}

majid4
پنج شنبه 09 بهمن 1393, 14:46 عصر
ممنون محمد جان

مشکل با شرط حل می شه ولی چرا پارامتر page کل مقدار رو بر می گردونه
مثلا آدرس وارد شده به این صورت هست

site.ir/category/flower/

پارامتر id مقدار flower رو برمی گردونه که درست هستش

ولی پارامتر page مقدار /category/flower رو بر می گردونه مشکل از کجاس ؟


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [QSA]
RewriteRule ^(.*)/(.*)/$ /index.php?page=$1&id=$2 [L,NC,QSA]

MMSHFE
پنج شنبه 09 بهمن 1393, 17:53 عصر
رول دوم رو قبل از اولی بگذارین. وقتی اولی اجرا میشه دیگه نوبت به دومی نمیرسه. ضمناً برای جلوگیری از تداخل رولها، اصلاحگر L (یعنی Last) رو به همه اضافه کنید تا اگه یک رول درست بود، دیگه بقیه رو تفسیر نکنه.

MMSHFE
پنج شنبه 09 بهمن 1393, 17:58 عصر
یک راه دیگه که به شما انعطاف پذیری بیشتری میده هم استفاده از htaccess. به این صورته:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?r=$1 [L,NC,QSA]
و بعد میتونید توی index.php مقدار ['GET['r_$ رو بخونید و با تابع explode و برحسب کارکتر / تبدیل به آرایه کنید و خونه های مختلفش رو پردازش کنید و ببینید چه کاری باید انجام بشه. این همون روشی هست که توی MVC کاربرد داره. برای مثال اگه آدرس اینطوری بود:

http://www.yoursite.com/show_pro/5/2
میتونید با این دستور توی index.php بفهمید چه فایلی صدا زده شده و id و page چی هستن:

list($file, $id, $page) = explode('/', $_GET['r']);
و برحسب نیاز، بعد از چک کردن موارد امنیتی (کاربر نباید هر فایلی رو بتونه ضمیمه کنه و باید از whitelist استفاده کنید)، اونوقت فایلی که کاربر درخواست کرده رو require کنید و داخلش با متغیرهای id و page کارهای لازم رو انجام بدین.

majid4
پنج شنبه 09 بهمن 1393, 21:44 عصر
ممنون دوست عزیز

مشکل حل شد فقط یه سوال کوچیک دیگه

وقتی کاربر به site.ir/show_pro/16 می ره لینک صفحه اصلی به این صورت در می آد site.ir/show_pro/16/home چجوری اینو درستش کنم ؟