PDA

View Full Version : سوال: سوال در مورد mod_rewrite (حل شد)



Dead Space
شنبه 19 اسفند 1391, 23:17 عصر
سلام دوستان
ببخشید من یه سوال در مورد mod_rewrite داشتم.
من در برنامم همه آدرس هام به Index.php میره و از اونجا به روتر من میره و از اونجا کنترلر و اکشن من اجرا میشه
یعنی مثلا به این صورت:
http://localhost/posts/index
که میشه کنترلر پست اکشن index
حال گاهی اوقات ممکن هستش بعد از index باز من یه مقدار دیگه بفرستم که این رو به عنوان view یعنی در
$_GET['view'] میگیرم
مثلا
http://localhost/posts/view/1
که کنترلر پست و اکشن view با مقدار 1 اجرا میشه.
اگر به همین صورت متد GET ما افزایش پیدا کنه مثلا دفعه بعد بعد از view که الان عرض کردم چیز دیگه ای هم نیاز باشه که با GET ارسال بشه یعنی همه ی اینها رو تک تک باید در .httaccess عنوان کرد ؟
ممنون میشم دوستان یه راهنمایی داشته باشن
تشکر

MMSHFE
یک شنبه 20 اسفند 1391, 00:13 صبح
نه نیاز نیست. میتونید توی htaccess. توی Rule که تعریف کردین، QSA رو هم بگذارین (Query Strings Also) و قسمت آخر که مربوط به ['GET['view_$ هست رو هم بصورتی تعریف کنید که / رو هم قبول کنه و بعد با explode تبدیل به آرایه کنید. وجود QSA باعث میشه که اگه بعد از آدرس ? و چندتا Query String دیگه هم به URL اضافه بشه (مثل http://localhost/posts/view/1?id=5&name=ali) اون QueryStringها هم ارسال بشن.

Dead Space
یک شنبه 20 اسفند 1391, 08:28 صبح
ممنون فقط یک سوال دیگه
اینکه چون من از mod_rewrite استفاده می کنم الان برای آدرس دادن فایل های js و css ام باید چطور .htaccess رو تنظیم کنم که مثلا اشاره کنه به پوشه webroot/css یا webroot/js ؟

MMSHFE
یک شنبه 20 اسفند 1391, 08:43 صبح
فکر کنم اینها کار کنن:


RewriteRule ^([^\.]+\.js)$ webroot/js/$1 [L,NC]
RewriteRule ^([^\.]+\.css)$ webroot/css/$1 [L,NC]

البته تست نکردم چون با موبایل وصل شدم.

Dead Space
یک شنبه 20 اسفند 1391, 10:07 صبح
خیلی ممنون حل شد
فقط متاسفانه یه مشکل دیگه که دارم اینه که الان فایل مثلا jquery.js بالا میاد ولی jquery.min.js بالا نمیاد به خاطر 2 تا نقطه ای که بینش داره
مشکل من آشنایی کم با عبارات با قاعده هستش.
برای حل این مشکل عبارت داخل hthaccess رو به چی تغییر بدم ؟
ممنون

MMSHFE
یک شنبه 20 اسفند 1391, 10:13 صبح
دو راه حل دارین:
1- از نقطه توی اسامی استفاده نکنید (مثلاً jqmin.js بگذارین) که این راه استانداردتره و امنیت بیشتری هم داره و از تزریق و اجرای فایلهای Shell توی هاستتون هم جلوگیری میکنه.
2- از کد زیر استفاده کنید:


RewriteRule ^(.+)?\.js$ webroot/js/$1.js [L,NC]
RewriteRule ^(.+)?\.css$ webroot/css/$1.css [L,NC]

این کد هر کارکتری رو توی اسم فایل مجاز میکنه.

ravand
یک شنبه 20 اسفند 1391, 10:55 صبح
1- از نقطه توی اسامی استفاده نکنید (مثلاً jqmin.js بگذارین) که این راه استانداردتره و امنیت بیشتری هم داره و از تزریق و اجرای فایلهای Shell توی هاستتون هم جلوگیری میکنه.
خب اگه من یه سایتی داشته باشم که اینطوری آدرس گذاری کرده باشم بعد فرم آپلود فایلم در اختیار عموم نباشه چیه؟ چجوری طرف میتونه سایتم رو هک کنه؟ من تا حالا هک نکردم و با این روش ها آشنایی ندارم. منظورم اینه که در چه مواقع باید این موارد رو رعایت کرد؟ و مثلا وسط نام نقطه نذاشت؟

MMSHFE
یک شنبه 20 اسفند 1391, 11:22 صبح
خوب در این مورد قاعدتاً امنیت برقراره ولی من کلی گفتم. بطور کلی بهتره از نقطه وسط اسم فایل استفاده نشه و راه حلش هم تغییر نام فایلها موقع آپلود یا نامگذاری و حذف نقطه یا تبدیلش به یک کارکتر دیگه مثل _ یا - هست. قبلاً درباره اش زیاد صحبت شده.

ravand
یک شنبه 20 اسفند 1391, 11:27 صبح
خوب در این مورد قاعدتاً امنیت برقراره ولی من کلی گفتم. بطور کلی بهتره از نقطه وسط اسم فایل استفاده نشه و راه حلش هم تغییر نام فایلها موقع آپلود یا نامگذاری و حذف نقطه یا تبدیلش به یک کارکتر دیگه مثل _ یا - هست. قبلاً درباره اش زیاد صحبت شده.
بله من اون مورد رو میدونم ولی وقتی شما گفتی نباید نقطه باشه. من شک کردم و گفتم نکنه کلا این نکته رو باید رعایت کرد.
متشکرم.