ترفندهای .htaccess
- تاریخ :
- دسته بندی : آموزشگاه / آموزش برنامه نویسی
- بـازدید : 3756
- نظـرات : 0
- نـویسنده : مدیریت
سلام خدمت تمامی دوستان برنامه نویس
امروزه بیشتر برنامه نویس های حرفه ای به سراغ فایل htaccess می رن چون بسیار امنیتی و شیرین هست و منم این مطلب بسیار جالب رو توی نت پیدا کردم که گفتم در اختیار شما بگذارم
برای شروع فکر میکنم همه بدونید که فايل .htaccess يا Distributed Configuration Files در واقع فايلهاي مخصوص كنترل آپاچي هست مکان خاصی ندارند روی هر شاخه و زیر شاخه تاثیر میزاره در واقع در کنار فایل های معمولی مثل php ,html قرار میگیره یعنی کاملا در دسترس هستند نام این فایل ها .htaccess هست یعنی صرفا همین -البته میشه یه سری تنظیمات رو دستکاری کرد و نام رو تغییر داد- اين فايلها از تگهاي مخصوص آپاچي استفاده ميكنن البته cgi script هم مي پذيرن
کاربردها :
كاربرد اول- تغيير صفحات خطا
برای نمایش صفحات خطا مثل 404 يا 500 و ... میتونید صفحات دلخواه خودتون رو طراحي و به اين طريق نمایش بدید
مسلما خیلی حرفه ای هست وب سایت هایی که برای کوچکترین موارد پیش بینی صورت بگیره
کد:
كاربرد دوم- نمایش پسوند دلخواه صفحات (add mime type)
يك راه امنيتي كه من واقعا پيشنهاد ميكنم واسه حفاظت از اسكريپت هاي php شما اينه كه اونا php نباشن !! بله يعني مثلا asp يا jsp باشن اينطوري یه مقدار مطلب پیچیده میشه برای تشخیص
کد:
Addtype ميگه كه ما ميخوايم يه فرمت جديد بشناسونيم بعد نوع اون فايلهاي خاص با فرمت دلخواه رو ميگيم مثلا image/png يا text/css بعد ميگيم كه چه فرمتي رو از اين به بعد به عنوان نوعي كه گفتيم بشناس
اما فرض كنيد ميخوايد از shtml , ssl در سايتتون استفاده كنيد و نياز به شناساندن اين فرمتها به آپاچي داريد :
کد:
كاربرد سوم- redirect ریدایرکت
کد:
توضيح: در اينجا مرورگري كه درخوست فايل test.html رو در شاخه dirold داشت بره به آدرس
http://site.com/DirNew/new.html
دوستانی که در زمینه SEO فعالیت دارند میدونند که این ریدایرکت چقدر موثره
كاربرد چهارم - IndexIgnore
بسیاری از هكرها بعد از نفوذ با browse كردن در دايركتوريهاي سايت شما و گشتن به دنبال فولدرها يا فايلها با پرميشن مطلوب كارشونو تكميل ميكنن و البته خيلي ها از اول از روش ديد زدن فولدرهايي كه حاوي موتور اسكريپت ها و اطلاعات با ارزشي هستن مثلا فايل config رو در بردارن به سايت نفوذ ميكنن
programer ها جهت جلوگيري از اين كار ميان و يه index.html خالي درست ميكنن اما با اين كد ميشه يه صفحه مربوط به خالي بودن فولدر رو نشون داد يعني هيچي تو اين شاخه نيست در حالي كه شاخه ميتونه پر فايل باشه ...
خیلی جالبه الان میتونم چندتا سایت پربازدید رو معرفی کنم که این مشکل رو دارند نکته خیلی جالبتر اینه که من مدتی پیش یک اسکریپت به دستم رسید داشتم ویرایشش میکردم و توابع اسمارتی رو بررسی میکردم که دیدم چندتا فایل کم هست یعنی چندتا صفحه نافص بود هرچقدذر نوشتم نتونستم اتصالات رو پیدا کنم تا اینکه برای تست رفتم وارد سایت تولید کننده این نرم افزار شدم از اونجایی که نسخه دمو روی سرور Run شده بود رفتم به دایرکتوری موردنظر با کمال تعجب دسترسی در پوشه تمپلیت مربوط به فایل های TPL باز بود منم با کمال لطف فایل های موردنظر رو برداشتم به همین راحتی
شاید در ظاهر استفاده از این طرفند خیلی پیش پا افتاده باشه اما میدونم خیلی از افراد به آسونی از کنارش میگذرند
کد:
- اگه مثلا خواستيد فقط يه نوع فايل محافظت شه مثلا فقط فايلهاي pdf مينويسييد :
کد:
كاربرد پنجم - از index.php يا index.html خسته نشديد؟
با اين كد هم ميشه به وب سرور امر كرد كه كدام فايل به عنوان صفحه نخست نمایش داده بشه
کد:
كاربرد ششم - DefaultCharset
بسیاری از مشکلات دوستان نمایش انکودینگ صفحات اینترنتی هست با دستور زیر میتونید آپاچی رو مقید کنید تا Charset موردنظر شما رو ایجاد کنه
کد:
كاربرد هفتم - deny from all
جهت حفاظت فایل های باز ارزش ولي محافظت نميشن ( مثلا mt-config.cgi ) اين كد ميگه كه هيچ مرورگر ي نتونه سورس اينها رو ببينه
کد:
البته میشه این دسترسی رو فقط واسه یه آی پی محدود کرد
کد:
كاربرد هشتم -امنیت بیشتر
دو تا كد امنيتيه ديگه
کد:
کارش که مشخصه فکر کنم
کد:
شما به بومبرينگ اعتقاد داريد ؟ اين كد جلوي FSOCKOPEN رو میگیره
كاربرد نهم - rewrite engine
اول از همه Apache RewriteEngine بايد در وب سرور شما فعال باشه .
اگه دسترسي داريد ميتونيد اين خط رو در httpd.conf اضافه كنيد :
کد:
اگرم بهش دسترسي نداريد اين كد هم شايد بتونه كار كنه بايد تو همون htaccess كپي كنيد
کد:
اين همون چيزيه كه واسه ساب دومين مجازي هم به كار ميبريم من يه مثال سادشو واستون ميزنم
فرض كنيد يه وبلاگ داشتيد با اين آدرس http://www.ABC.com/ABC
حالا بلاگتون آدرسش عوض شده به اين http://www.ABC.com/AAAAA
البته دقت داشته باشيد اين هيچ ربطي به redirct نداره
**این مورد رو دوستانی که به SEO وارد هستند میتونند متوجه بشن که ریدایرکت با ریرایت خیلی فرق داره از نظر نتیجه ای که در اینده برای ما در برخواهد داشت
کد:
یکی از بهترین امکاناتی که اپاچی بهتون میده بهش mod_rewrite هستش که باعث میشه سایتتون خیلی تمیزتر بنظر بیاد و به عبارتی SEO بشه !!!
تو هرجایی که شما بخواید از mod_rewrite استفاده کنید نیاز دارید که کد
کد:
رو در فایل تون قرار بدید
بزارید یک مثال بزنم , میخوایم تمام صفحات php رو تبدیل کنیم به html :
کد:
در دستور بالا ما گفتیم هر فایل php بود تبدیلش کن به .htm ولی این دلیل براین نیست که فرمت فایل عوض میشه نه!!! بلکه به هردو صورت دسترسی به فایل امکان پذیر هست برای مثال اگه یه فایل test.php داشته باشیم هم میتونیم با اسم test.htm بهش دسترسی پیدا کنیم و هم از test.php .
[nc] : این دستور یعنی No Case یا همون case-insensitive
فرض میکنیم اسم دومینمون رو عوض کردیم ولی فایل هامون همون قبلی ها هستن و میخوایم هرکسی تو دومین اولی یک فایل رو فراخوانی کرد ما همون فایل رو تو دومین دوم صدا بزنیم اینجور عمل میکنیم :
کد:
301 یعنی مستقیما ریدایرکت شده , دستور بالا زمانی خوبه که یه سایت قدیمی داریم حالا میخوایم update کنیم این کار باعث میشه موتورهای جستجوگر نتایج ما رو اتوماتیک آپدیت کنند
اینجا رو ببینید »
کد:
بزارید ساده بگم اگه شما عبارت (.+) رو مساوی با 1$ فرض کنیم ( 1$=(.+) )ما میتونیم چندین بار از این عبارت استفاده کنیم به این صورت که بار اول که از (.+) استفاده میکنیم مساوی با 1$ میگیریم در دفعه دوم مساوی با 2$ میگیریم و همینطور الا اخر .
در مثال بالا برای مثال اگه ما یه فایل در مسیر
کد:
داشته باشیم این لینک از ادرس زیر هم در دسترس خواهد بود :
کد:
مثال :
کد:
]
حالا اگه ادرس ارشیو وبلاگ ما بصورت :
کد:
باشه تبدیل میشه به :
کد:
با کمی Regular Expression میتونید ادرس هاتون رو خیلی حرفه ای تر کنید و زیباتر
راهنما دستورات :
کد:
[chars] یکی ار کاراکترها میتونه این باشه برای مثال [A]
[^chars] هیج یک از این کاراکتر ها نباشه برای مثال [^A]
text1|text2 همون کار or رو انجام میده
Quantifiers:
? میتونه یک کاراکتر باشه و یا هیچ کاراکتری
* هرچیزی میتونه باشه حتی اگه چیزی وجود نداشته باشه
+ حداقل یک کاراکتر وجود دارد
Grouping:
(text) برای ساختن گروه بکار میره
Anchors:
^ شروع
$ پایان
Escaping:
char برای مثال برای درنظر نگرفتن علائمی مثل [] یا . یا غیره هست در این مواقع به عنوان دستور در نظر نمیگیره
مثال
کد:
در مثال بالا ما گفتیم هر ادرسی که بعد از download.php قرار گرفت تبدیلش کنه به ادرس برای مثال
اگه ادرسمون اینجوری باشه :
کد:
تبدیل میشه به :
کد:
در مثال بعدی میخوایم دسترسی به پوشه هارو بگیریم از کاربر
کد:
تو قسمت بالا اگه کاربر بخواد به هر نحوی وارد یه پوشه بشه ریدایرکت میشه به deny.php
بزارید در مثال بعدی کاری کنیم که فقط به فایل های خاصی دسترسی داشته باشه و بجز اون هر فایلی خواست باز کنه ارور بده :
کد:
تو دستور بالا ما گفتیم فقط به فایل هایCss Js و فایل file.php اجازه بده که توسط کاربر فراخوانی بشه در غیر اینصورت ریدایرکت کنش به پوشه /deny/ .
HotLinking مثال
کد:
خوب فکر نمیکنم زیاد لازم به توضیح باشه کد بالا هر درخواستی رو که برای لود کردن عکس با فرمت gif,jpg,png از یه سایت دیگه باشه عکس http://mehr-design.ir/red.jpg نمایش داده میشه .
اضافه کردن WWW به ادرس سایت :
این کد این کار رو براتون میکنه :
کد:
در واقع یه نوع ریدایرکت هستش البته از نوع peremantly moved .
ترجمه سایت :
کد:
در کد بالا در صورتی که به اخر یک لینک یا ادرس یکی از کلمات de , -fr , -pr, -it- اضافه بشه توسط گوگل میتونید ترجمه کنید .
عوض کردن نوع لینک برای مثال نوع ادرس عکس :
کد:
خاموش و روشن کردن رجیستر گلوبال جهت اینستال برخی از برنامه ها
کد:
امیدوارم که این آموزش به دردتون خورده باشه
موفق باشید دوستان
امروزه بیشتر برنامه نویس های حرفه ای به سراغ فایل htaccess می رن چون بسیار امنیتی و شیرین هست و منم این مطلب بسیار جالب رو توی نت پیدا کردم که گفتم در اختیار شما بگذارم
برای شروع فکر میکنم همه بدونید که فايل .htaccess يا Distributed Configuration Files در واقع فايلهاي مخصوص كنترل آپاچي هست مکان خاصی ندارند روی هر شاخه و زیر شاخه تاثیر میزاره در واقع در کنار فایل های معمولی مثل php ,html قرار میگیره یعنی کاملا در دسترس هستند نام این فایل ها .htaccess هست یعنی صرفا همین -البته میشه یه سری تنظیمات رو دستکاری کرد و نام رو تغییر داد- اين فايلها از تگهاي مخصوص آپاچي استفاده ميكنن البته cgi script هم مي پذيرن
کاربردها :
كاربرد اول- تغيير صفحات خطا
برای نمایش صفحات خطا مثل 404 يا 500 و ... میتونید صفحات دلخواه خودتون رو طراحي و به اين طريق نمایش بدید
مسلما خیلی حرفه ای هست وب سایت هایی که برای کوچکترین موارد پیش بینی صورت بگیره
کد:
12 | ErrorDocument 404 /404.html ErrorDocument 500 /500.html |
يك راه امنيتي كه من واقعا پيشنهاد ميكنم واسه حفاظت از اسكريپت هاي php شما اينه كه اونا php نباشن !! بله يعني مثلا asp يا jsp باشن اينطوري یه مقدار مطلب پیچیده میشه برای تشخیص
کد:
12 | <div style="text-align: left;">AddType application/x-httpd-php .asp .jsp </div> |
اما فرض كنيد ميخوايد از shtml , ssl در سايتتون استفاده كنيد و نياز به شناساندن اين فرمتها به آپاچي داريد :
کد:
123 | AddType text/html .shtml AddHandler server-parsed .shtml Options Indexes FollowSymLinks Includes |
کد:
12 | <div style="text-align: left;">Redirect /Dirold/test.html <a href="http://site.com/DirNew/new.html" target="_blank">http://site.com/DirNew/new.html</a> </div> |
http://site.com/DirNew/new.html
دوستانی که در زمینه SEO فعالیت دارند میدونند که این ریدایرکت چقدر موثره
كاربرد چهارم - IndexIgnore
بسیاری از هكرها بعد از نفوذ با browse كردن در دايركتوريهاي سايت شما و گشتن به دنبال فولدرها يا فايلها با پرميشن مطلوب كارشونو تكميل ميكنن و البته خيلي ها از اول از روش ديد زدن فولدرهايي كه حاوي موتور اسكريپت ها و اطلاعات با ارزشي هستن مثلا فايل config رو در بردارن به سايت نفوذ ميكنن
programer ها جهت جلوگيري از اين كار ميان و يه index.html خالي درست ميكنن اما با اين كد ميشه يه صفحه مربوط به خالي بودن فولدر رو نشون داد يعني هيچي تو اين شاخه نيست در حالي كه شاخه ميتونه پر فايل باشه ...
خیلی جالبه الان میتونم چندتا سایت پربازدید رو معرفی کنم که این مشکل رو دارند نکته خیلی جالبتر اینه که من مدتی پیش یک اسکریپت به دستم رسید داشتم ویرایشش میکردم و توابع اسمارتی رو بررسی میکردم که دیدم چندتا فایل کم هست یعنی چندتا صفحه نافص بود هرچقدذر نوشتم نتونستم اتصالات رو پیدا کنم تا اینکه برای تست رفتم وارد سایت تولید کننده این نرم افزار شدم از اونجایی که نسخه دمو روی سرور Run شده بود رفتم به دایرکتوری موردنظر با کمال تعجب دسترسی در پوشه تمپلیت مربوط به فایل های TPL باز بود منم با کمال لطف فایل های موردنظر رو برداشتم به همین راحتی
شاید در ظاهر استفاده از این طرفند خیلی پیش پا افتاده باشه اما میدونم خیلی از افراد به آسونی از کنارش میگذرند
کد:
12 | <div style="text-align: left;">IndexIgnore * </div> |
کد:
1 | IndexIgnore application/pdf |
كاربرد پنجم - از index.php يا index.html خسته نشديد؟
با اين كد هم ميشه به وب سرور امر كرد كه كدام فايل به عنوان صفحه نخست نمایش داده بشه
کد:
12345 | <div style="text-align: left;">DirectoryIndex homearea.php homearea.php رو به هر فايلي با هر نامي تغيير بديد. - DirectoryIndex يه فاصله و بعد نام فايل با هر فرمتي </div> |
بسیاری از مشکلات دوستان نمایش انکودینگ صفحات اینترنتی هست با دستور زیر میتونید آپاچی رو مقید کنید تا Charset موردنظر شما رو ایجاد کنه
کد:
1 | AddDefaultCharset utf-8 |
جهت حفاظت فایل های باز ارزش ولي محافظت نميشن ( مثلا mt-config.cgi ) اين كد ميگه كه هيچ مرورگر ي نتونه سورس اينها رو ببينه
کد:
12345 | <div style="text-align: left;"> <Directory /> Order Deny,Allow Deny from All </Directory> </div> |
کد:
1234 | <div style="text-align: left;"> order allow,deny deny from 123.45.6.7 deny from 012.34.5. allow from all</div> |
كاربرد هشتم -امنیت بیشتر
دو تا كد امنيتيه ديگه
کد:
123 | <div style="text-align: left;"><Limit POST PUT DELETE> </Limit> </div> |
کد:
123 | <div style="text-align: left;"><LimitExcept POST GET> </LimitExcept> </div> |
كاربرد نهم - rewrite engine
اول از همه Apache RewriteEngine بايد در وب سرور شما فعال باشه .
اگه دسترسي داريد ميتونيد اين خط رو در httpd.conf اضافه كنيد :
کد:
1 | LoadModule rewrite_module modules/mod_rewrite.so |
کد:
12345 | <div style="text-align: left;"><IfDefine ReverseProxy> LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/libproxy.so </IfDefine> </div> |
فرض كنيد يه وبلاگ داشتيد با اين آدرس http://www.ABC.com/ABC
حالا بلاگتون آدرسش عوض شده به اين http://www.ABC.com/AAAAA
البته دقت داشته باشيد اين هيچ ربطي به redirct نداره
**این مورد رو دوستانی که به SEO وارد هستند میتونند متوجه بشن که ریدایرکت با ریرایت خیلی فرق داره از نظر نتیجه ای که در اینده برای ما در برخواهد داشت
کد:
123 | <div style="text-align: left;">RewriteEngine on RewriteRule ^AAAA(/.*)?$ /ABC$1 [R=permanent] </div> |
تو هرجایی که شما بخواید از mod_rewrite استفاده کنید نیاز دارید که کد
کد:
12 | <div style="text-align: left;"> Options +FollowSymlinks RewriteEngine on</div> |
بزارید یک مثال بزنم , میخوایم تمام صفحات php رو تبدیل کنیم به html :
کد:
1234 | <div style="text-align: left;"> Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*).htm$ $1.php [nc] </div> |
[nc] : این دستور یعنی No Case یا همون case-insensitive
فرض میکنیم اسم دومینمون رو عوض کردیم ولی فایل هامون همون قبلی ها هستن و میخوایم هرکسی تو دومین اولی یک فایل رو فراخوانی کرد ما همون فایل رو تو دومین دوم صدا بزنیم اینجور عمل میکنیم :
کد:
1234 | <div style="text-align: left;">Options +FollowSymlinks rewriteengine on rewriterule ^(.+).htm$ http://mehr-design.ir/$1.php [r=301,nc] </div> |
اینجا رو ببینید »
کد:
1234 | <div style="text-align: left;">Options +FollowSymlinks RewriteEngine on RewriteRule ^myfiles/(.+)/(.+).zip download.php?section=$1&filename=$2 [nc] </div> |
در مثال بالا برای مثال اگه ما یه فایل در مسیر
کد:
1 | http://mehr-design.ir/download.php?section=appz&filename=ABC |
داشته باشیم این لینک از ادرس زیر هم در دسترس خواهد بود :
کد:
12 | <div style="text-align: left;">http://mehr-design.ir/myfiles/appz/ABC.zip </div> |
مثال :
کد:
123 | Options +FollowSymlinks RewriteEngine on RewriteRule ^blog/([0-9]+)-([a-z]+) http://mehr-design.ir/weblog/index.php?archive=$1-$2 [nc |
حالا اگه ادرس ارشیو وبلاگ ما بصورت :
کد:
12 | <div style="text-align: left;">http://mehr-design.ir/weblog/index.php?archive=2007-sep </div> |
کد:
1 | http://persiandev.net/blog/2007-sep |
راهنما دستورات :
کد:
1 | <div style="text-align: left;"> . Any single character</div> |
[^chars] هیج یک از این کاراکتر ها نباشه برای مثال [^A]
text1|text2 همون کار or رو انجام میده
Quantifiers:
? میتونه یک کاراکتر باشه و یا هیچ کاراکتری
* هرچیزی میتونه باشه حتی اگه چیزی وجود نداشته باشه
+ حداقل یک کاراکتر وجود دارد
Grouping:
(text) برای ساختن گروه بکار میره
Anchors:
^ شروع
$ پایان
Escaping:
char برای مثال برای درنظر نگرفتن علائمی مثل [] یا . یا غیره هست در این مواقع به عنوان دستور در نظر نمیگیره
مثال
کد:
1234 | <div style="text-align: left;">Options +FollowSymlinks RewriteEngine On RewriteRule ^get(.*) /public/download/download.php$1 </div> |
اگه ادرسمون اینجوری باشه :
کد:
1 | http://mehr-design.ir/downloads/download.php?myfile=ABC.zip |
کد:
1 | http://mehr-design.ir/Get?myfile=ABC.zip |
کد:
123 | Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*)$ deny.php [nc] |
بزارید در مثال بعدی کاری کنیم که فقط به فایل های خاصی دسترسی داشته باشه و بجز اون هر فایلی خواست باز کنه ارور بده :
کد:
1234567 | <div style="text-align: left;">Options +FollowSymlinks RewriteEngine On rewritecond %{REQUEST_FILENAME} !^(.+).css$ rewritecond %{REQUEST_FILENAME} !^(.+).js$ rewritecond %{REQUEST_FILENAME} !file.php$ RewriteRule ^(.+)$ /deny/ [nc] </div> |
HotLinking مثال
کد:
1234567 | <div style="text-align: left;">Options +FollowSymlinks # no hot-linking RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?mehr-design\.ir/ [nc] RewriteRule .*.(gif|jpg|png)$ http://mehr-design.ir/red.jpg [nc] </div> |
اضافه کردن WWW به ادرس سایت :
این کد این کار رو براتون میکنه :
کد:
12345 | <div style="text-align: left;">Options +FollowSymlinks RewriteEngine on rewritecond %{http_host} ^www.mehr-design.ir [nc] rewriterule ^(.*)$ http://mehr-design.ir/$1 [r=301,nc] </div> |
ترجمه سایت :
کد:
12345678 | <div style="text-align: left;">Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*)-fr$ http://www.google.com/translate_c?hl=fr&sl=en&u=http://mehr-design.ir/$1 [r,nc] RewriteRule ^(.*)-de$ http://www.google.com/translate_c?hl=de&sl=en&u=http://mehr-design.ir/$1 [r,nc] RewriteRule ^(.*)-es$ http://www.google.com/translate_c?hl=es&sl=en&u=http://mehr-design.ir/$1 [r,nc] RewriteRule ^(.*)-it$ http://www.google.com/translate_c?hl=it&sl=en&u=http://mehr-design.ir/$1 [r,nc] RewriteRule ^(.*)-pt$ http://www.google.com/translate_c?hl=pt&sl=en&u=http://mehr-design.ir/$1 [r,nc] </div> |
عوض کردن نوع لینک برای مثال نوع ادرس عکس :
کد:
12345 | <div style="text-align: left;">Options +FollowSymlinks RewriteEngine on RewriteRule ^pictures/(.*) http://mehr-design.ir/getpicture.php?$1 [r] </div> |
کد:
12 | <div style="text-align: left;">php_flag register_globals on </div> |
موفق باشید دوستان
کلمات کلیدی :
ترفندهای .htaccess, طراح سایت, گیل دیتا, سایت پزشک, سایت گالری, رشت, لیزرموهای زائد, مشاوراملاک, سایت شخصی, قالب سایت, برنامه نویسی, گل, گلکده, شورای رشت, گیلان, سئو, افزایش بازدید, امنیت, هک و نفوذ, ویژوال بیسیک, اندروید, بازی, نرم اف