• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

چند سوال درباره Rewrite Mode و PHP

wolfskin

کاربر تازه وارد
تاریخ عضویت
29 ژوئن 2004
نوشته‌ها
107
لایک‌ها
1
سن
39
محل سکونت
تهران
سلام به همه دوستان

من دارم با PHP یک سایت طراحی می کنم و می خام از Rewrite Mode استفاده کنم.

برای اینکار من فایل های PHP رو داخل یک دایرکتوری به نام phpfiles قرار دادم و در root با استفاده از htaccsess دوستورات مربوط به Rewite رو نوشتم.

الان 2 تا مشکل دارم که یکیش رو یه جوری حل کردم. ولی مشکل دوم باقیه.

مشکل اول اینه که چون توی root هیچ فایل حقیقی وجود نداره به همین خاطر چیزی نمایش داده نمیشه. من یک فایل index.php درست کردم و کاربر رو ریدایرکت کردم به index.html می خواستم بدونم میشه کاری کرد که بدون نیاز به این index.php هرکی آدرس سایت رو میزنه همون فایل index.html (که در حقیقت وجود نداره) مورد دسترسی قرار بگیره؟

مشکل دومم اینه که نمی خام کسی به فایل های php به صورت مستقیم دسترسی داشته باشه. یعنی فایل های داخل فولدر phpfiles توسط کاربر ها قابل اجرا نباشه.

ممنون
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
47
مشکل اولتو من چند بار خوندم ولی واقعیتش متوجه منظورت نشدم. برای اینکه کاربران به فایلهای php مستقیماً دسترسی نداشته باشند، در htaccess. اینو بنویس:
کد:
<FilesMatch "\.php$">
  Order Allow,Deny
  Deny from All
</FilesMatch>
 

wolfskin

کاربر تازه وارد
تاریخ عضویت
29 ژوئن 2004
نوشته‌ها
107
لایک‌ها
1
سن
39
محل سکونت
تهران
خیلی ممنون از توجهی که داشتین.

ولی متاسفانه این راه حل شما جواب نمیده. چون الان وقتی از طریق URL های Rewrite شده هم می خام به سایت دسترسی پیدا کنم ارور میده. مثلا وقتی می زنم localhost/index.html ارور زیر رو میده. با این دستور کلا اجرای PHP غیر فعال میشه. من می خام فقط کاربرا نتونن اجرا کنن.
کد:
Forbidden

You don't have permission to access /phpfiles/index.php on this server.

در مورد مشکل اول هم دوباره توضیح می دم.

من از طریق Rewrite mode دستور دادم هر موقع فایل index.html درخواست داده شد phpfiles/index.php اجرا بشه و نتیجه نمایش داده بشه.

اما مشکل اینجاست که توی فولدر اصلی یعنی root یا همون public_html هیچ فایل ایندکسی وجود نداره. بنابر این آپاچی وقتی فایل ایندکس نمی بینه یا دایرکتوری رو لیست می کنه.

من برای اینکه این مشکل حل بشه یک فایل php خودم نوشتم و به عنوان ایندکس گذاشتم و با استفاده از دستور header کاربر رو به index.html منتقل کردم.

می خواستم بدون راه حل دیگه ای برای اینکار وجود داره یا نه.
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
47
برای ایندکس دایرکتوری:
کد:
RewriteRule ^/?$ phpfiles/index.php
برای جلوگیری از اجرای مستقیم فایلهای php:
کد:
RewriteRule ^.*\.php$ banned.html
من اینها رو تست نکردم ولی طبق تجارب قبلی باید جواب بدن.
 

wolfskin

کاربر تازه وارد
تاریخ عضویت
29 ژوئن 2004
نوشته‌ها
107
لایک‌ها
1
سن
39
محل سکونت
تهران
برای ایندکس دایرکتوری:
کد:
RewriteRule ^/?$ phpfiles/index.php
برای جلوگیری از اجرای مستقیم فایلهای php:
کد:
RewriteRule ^.*\.php$ banned.html
من اینها رو تست نکردم ولی طبق تجارب قبلی باید جواب بدن.

سلام.

خیلی ممنون. دستور اول که جواب داد و خیلی هم کمک کرد. ممنونم.

ولی دستور دوم بازم جواب نمیده. در واقع این دستورات جلوی خوده آپاچی رو هم برای اجرای فایل های PHP میگیره. با این کار باز هم اگر با آدرس های Rewite شده بخام صفحه ای رو ببینم banned.html نمایش داده میشه.

بازم ممنون
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
47
یک کمی تعجب انگیزناکه؟! هر دوشون باید کار کنند به خصوص ریرایت که اصلاً کاری به اسم فیزیکی فایل نداره. شاید اگر ته خط [L] بذاری درست بشه. یک راه دیگه اینه که اول همه فایلهای php یک if بذاری که query string رو چک کنه. اگه html. نبود اجرا نشه.

یک راه بهتر که من خودم از این راه استفاده میکنم اینه که من فقط یک فایل index.php قابل اجرا دارم. بقیه همه include میشن. (این روشیه که اکثر cms ها به کار میبرن). خوب دیگه به جای اینکه اسم فایلهای دیگه رو page.php بذارم، میذارم page.inc.php. در نهایت این کد رو به htaccess. اضافه میکنم و تمام:
کد:
<FilesMatch "\.inc\.php$">
  Order Allow,Deny
  Deny from All
</FilesMatch>
برای index.php هم query string رو چک کن.
 

wolfskin

کاربر تازه وارد
تاریخ عضویت
29 ژوئن 2004
نوشته‌ها
107
لایک‌ها
1
سن
39
محل سکونت
تهران
سلام

فکر کنم راه حل دومی که گفتین بهتر باشه. البته کلی کد نوشتم که یک سری تغییرات باید داخلش اعمال کنم.
اینجوری کارم هم راحت تر میشه.

ممنون
 

yoosef_a

کاربر تازه وارد
تاریخ عضویت
27 جولای 2010
نوشته‌ها
1
لایک‌ها
0
با سلام

نمی دونم این مشکل هست یا عدم آگاهی من در استفاده از این Mod ولی پس استفاده از rewrite mode کلیه لینکها تغییر می کند و می بایست کلیه لینکها با توجه به تعداد دایرکتوری های در نظر گرفته شده در rewrite تغییر کند!! آیا روشی برای جلوگیری از این تغییرات وجود دارد؟ شاید منظورمو درست توضیح نداده باشم برای همین مثالی می زنم:

مثلا در صفحه: http://yourdomain.com/detail.php?id=1000&textID=1200 لینکی به آدرس index.php وجود دارد و در صورت استفاده از rewrite mode آدرس صفحه بالا به صورت زیر تغییر کرده:
http://yourdomain.com/detail/1000/textID/1200 که در این صفحه لینک گفته شده می بایست به صورت ../../../../index.php تغییر کند.

آیا روشی برای جلوگیری و اصلاح این تغییرات وجود دارد که به وسیله آن همه لینکها به یک صورت نمایش داده شود؟


با سپاس
 
بالا