/
  • ترفندهای .htaccess

  • ارسال پاسخ   امتیاز موضوع:
    • 2 رأی - میانگین امیتازات: 5
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی ترفندهای .htaccess
    نویسنده پیام
    arlabbafi آفلاین
    آرسنال
    **

    ارسال‌ها: 44
    تاریخ عضویت: ۱۳۸۷ اسفند ۱
    اعتبار: 1
    تشکرها : 11
    ( 25 تشکر در 7 ارسال )
    ارسال: #1
    ترفندهای .htaccess
    Post آموزش : ترفندهای .htaccess
    سلام به همگی

    مدتی هست قراره این مطلب رو توضیح بدم اما مشکلات نمیزاشت الان که دیدم زمان خالی دارم فکر کردم بهترین کار نوشتن این آموزشه
    درخواست ها و سوالات متعدد کاربران آپاچی سرور در مورد این مطلب خیلی زیاده اگه یه جستجو کوچک داشته باشید کلی سوال در مورد این موضوع خواهید دید از طرفی من لحاظ میکنم که کلیه کسانی که دارند این مقاله رو می خونند حتما اطلاعاتی ابتدایی در مورد htaccess دارند و میدونید حکایت چیه...

    همونطور که خیلی از شما میدونید این مبحث خیلی طولانی هست از این رو خلاصه نویسی توی این مقاله خیلی زیاده اما مسلماً منظور من برای کاربران حرفه ای و آماتور روشنه یه سری مثال ها رو از اینترنت پیدا کردم یعنی کرده بودم(برمیگرده به سال ها پیش)...

    برای شروع فکر میکنم همه بدونید که فايل .htaccess يا Distributed Configuration Files در واقع فايلهاي مخصوص كنترل آپاچي هست مکان خاصی ندارند روی هر شاخه و زیر شاخه تاثیر میزاره در واقع در کنار فایل های معمولی مثل PHP ,HTML قرار میگیره. یعنی کاملاً در دسترس هستند نام این فایل ها .htaccess هست یعنی صرفًا همین -البته میشه یه سری تنظیمات رو دستکاری کرد و نام رو تغییر داد- اين فايلها از تگهاي مخصوص آپاچي استفاده ميكنن که CGI-Script هم مي پذيرن.

    کاربردها:
    كاربرد اول- تغيير صفحات خطا
    برای نمایش صفحات خطا مثل 404 يا 500 و... میتونید صفحات دلخواه خودتون رو طراحي و به اين طريق نمایش بدید.
    مسلماً خیلی حرفه ای هست وب سایت هایی که برای کوچکترین موارد پیش بینی صورت بگیره.
    کد:
    ErrorDocument 404 /404.html
    ErrorDocument 500 /500.html
    كاربرد دوم- نمایش پسوند دلخواه صفحات(add mime type)
    يك راه امنيتي كه من واقعاً پيشنهاد ميكنم واسه حفاظت از اسكريپت هاي PHP شما اينه كه PHP نباشن!! بله يعني مثلا ASP يا JSP باشن اينطوري یه مقدار مطلب پیچیده میشه برای تشخیص.
    کد:
    AddType application/x-httpd-php .asp .jsp
    ميگه كه ما ميخوايم يه فرمت جديد بشناسونيم بعد نوع اون فايلهاي خاص با فرمت دلخواه رو ميگيم مثلا image/png يا text/css بعد ميگيم كه چه فرمتي رو از اين به بعد به عنوان نوعي كه گفتيم بشناس.
    اما فرض كنيد ميخوايد از shtml , ssl در سايتتون استفاده كنيد و نياز به شناساندن اين فرمتها به آپاچي داريد:
    کد:
    AddType text/html .shtml
    AddHandler server-parsed .shtml
    Options Indexes FollowSymLinks Includes
    كاربرد سوم- Redirect/انتقال
    کد:
    Redirect /Dirold/test.html
    http://site.com/DirNew/new.html
    توضيح: در اينجا مرورگري كه درخوست فايل test.html رو در شاخه dirold داشت بره به آدرس http://site.com/DirNew/new.html
    دوستانی که در زمینه SEO فعالیت دارند میدونند که این انتقال چقدر موثره.
    كاربرد چهارم - IndexIgnore
    بسیاری از خرابکارها بعد از نفوذ به وبسایت با browse كردن در پوشه های وبسايت و گشتن به دنبال فايلها با دسترسی مطلوب كارشونو تكميل ميكنن و البته خيلي ها از اول از روش ديد زدن پوشه هایی كه حاوي موتور اسكريپت ها و اطلاعات با ارزشي هستن مثلا فايل config رو در بردارن. برنامه نویسان جهت جلوگيري از اين كار ميان و يه index.html خالي درست ميكنن اما با اين كد ميشه يه صفحه مربوط به خالي بودن پوشه/Folder رو نشون داد يعني هيچي تو اين شاخه نيست در حالي كه شاخه ميتونه پر فايل باشه...

    خیلی جالبه الان میتونم چندتا وبسایت پربازدید رو معرفی کنم که این مشکل رو دارند نکته خیلی جالبتر اینه که من مدتی پیش یک اسکریپت به دستم رسید داشتم ویرایشش میکردم و توابع اسمارتی رو بررسی میکردم که دیدم چندتا فایل کم هست یعنی چندتا صفحه ناقص بود هرچقدر گشتم نتونستم اتصالات رو پیدا کنم تا اینکه برای تست رفتم وارد وبسایت تولید کننده این نرم افزار(اسمارتی) شدم از اونجایی که نسخه نمایشی روی سرور Run شده بود رفتم به پوشه مورد نظر با کمال تعجب دسترسی در پوشه Template مربوط به فایل های Tpl باز بود منم با کمال لطف فایل های موردنظر رو برداشتم به همین راحتی..
    شاید در ظاهر استفاده از این ترفند خیلی پیش پا افتاده باشه اما میدونم خیلی از افراد به آسونی از کنارش میگذرند.
    کد:
    IndexIgnore *
    - اگه مثلا خواستيد فقط يه نوع فايل محافظت بشه، مثلا فقط فايلهاي PDF مينويسيد:
    کد:
    IndexIgnore application/pdf

    كاربرد پنجم - از index.php يا index.html خسته نشديد؟
    با اين كد ميشه به وب سرور امر كرد كه كدام فايل به عنوان صفحه نخست نمایش داده بشه:
    کد:
    DirectoryIndex home.php
    home.php رو می تونید به هر فايلي با هر نامي تغيير بديد.

    كاربرد ششم - DefaultCharset
    بسیاری از مشکلات دوستان نمایش Encoding صفحات اینترنتی هست با دستور زیر میتونید آپاچی رو مقید کنید تا Charset موردنظر شما رو ایجاد کنه:
    کد:
    AddDefaultCharset utf-8
    كاربرد هفتم - deny from all
    جهت حفاظت فایل های باز ارزش ولي محافظت نميشن( مثلا mt-config.cgi ) اين كد ميگه كه هيچ مرورگري نتونه سورس اينها رو ببينه:
    کد:
    <Directory />
    Order Deny,Allow
    Deny from All
    </Directory>
    البته میشه این دسترسی رو هم برای یه IP محدود کرد:
    کد:
    order allow,deny
    deny from 123.45.6.7
    deny from 012.34.5.
    allow from all
    كاربرد هشتم -امنیت بیشتر
    کد:
    <Limit POST PUT DELETE>
    </Limit>
    کارش که مشخصه فکر کنم...
    کد:
    <LimitExcept POST GET>
    </LimitExcept>
    شما به بومبرينگ اعتقاد داريد؟ اين كد جلوي FSocketOpen رو میگیره.

    كاربرد نهم - rewrite engine
    اول از همه Apache RewriteEngine بايد در وب سرور شما فعال باشه. اگه دسترسي داريد ميتونيد اين خط رو در httpd.conf اضافه كنيد:
    کد:
    LoadModule rewrite_module modules/mod_rewrite.so
    اگرم بهش دسترسي نداريد اين كد هم شايد بتونه كار كنه بايد تو همون htaccess كپي كنيد:
    کد:
    <IfDefine ReverseProxy>
    LoadModule rewrite_module modules/mod_rewrite.so
    LoadModule proxy_module modules/libproxy.so
    </IfDefine>
    اين همون چيزيه كه برای Subdomain مجازي هم به كار ميبريم. من يه مثال سادشو واستون ميزنم:
    فرض كنيد يه وبلاگ داشتيد با اين آدرس:
    http://www.majidonline.com/siavashmusic
    حالا بلاگتون آدرسش عوض شده به اين http://www.majidonline.com/Majid
    البته دقت داشته باشيد اين هيچ ربطي به redirct نداره
    ** این مورد رو دوستانی که به SEO وارد هستند میتونند متوجه بشن که Redirect با Rewrite خیلی فرق داره از نظر نتیجه ای که در اینده برای ما در برخواهد داشت **

    RewriteEngine on
    RewriteRule ^ehsan(/.*)?$ /knowhow$1 [R=permanent]

    یکی از بهترین امکاناتی که آپاچی بهتون میده بهش mod_rewrite هستش که باعث میشه سایتتون خیلی تمیزتر بنظر بیاد و به عبارتی SEO بشه!!
    تو هرجایی که شما بخواید از mod_rewrite استفاده کنید نیاز دارید که کد
    کد:
    Options +FollowSymlinks
    RewriteEngine on
    رو در فایل تون قرار بدید.
    بزارید یک مثال بزنم , میخوایم تمام صفحات php رو تبدیل کنیم به html :
    کد:
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^(.*).html$ $1.php [nc]
    در دستور بالا ما گفتیم هر فایل php بود تبدیلش کن به .html ولی این دلیل براین نیست که فرمت فایل عوض میشه، نه!! بلکه به هردو صورت دسترسی به فایل امکان پذیر هست برای مثال اگه یه فایل test.php داشته باشیم هم میتونیم با اسم test.htm بهش دسترسی پیدا کنیم و هم از test.php .
    [nc] : این دستور یعنی No Case یا همون case-insensitive

    فرض میکنیم اسم دومینمون رو عوض کردیم ولی فایل هامون همون قبلی ها هستن و میخوایم هرکسی تو دومین اولی یک فایل رو فراخوانی کرد ما همون فایل رو تو دومین دوم صدا بزنیم اینجور عمل میکنیم :
    کد:
    Options +FollowSymlinks
    rewriteengine on
    rewriterule ^(.+).htm$ http://clicksor.ir/$1.php [r=301,nc]
    301 یعنی مستقیما انتقال شده, دستور بالا زمانی خوبه که یه سایت قدیمی داریم حالا میخوایم Update کنیم این کار باعث میشه موتورهای جستجوگر نتایج ما رو بصورت خودکار Update کنند.
    اینجا رو ببینید:
    کد:
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^myfiles/(.+)/(.+).zip download.php?section=$1&filename=$2 [nc]
    بزارید ساده بگم اگه شما عبارت (.+) رو مساوی با 1$ فرض کنیم ( 1$=(.+) )ما میتونیم چندین بار از این عبارت استفاده کنیم به این صورت که بار اول که از (.+) استفاده میکنیم مساوی با 1$ میگیریم در دفعه دوم مساوی با 2$ میگیریم و همینطور الا آخر.
    در مثال بالا، برای مثال اگه ما یه فایل در مسیر
    http://clicksor.ir/download.php?section=...me=Siavash
    داشته باشیم این Link از آدرس زیر هم در دسترس خواهد بود:
    http://clicksor.ir/myfiles/appz/Siavash.zip
    مثال:
    کد:
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^blog/([0-9]+)-([a-z]+) http://clicksor.ir/weblog/index.php?archive=$1-$2 [nc]
    حالا اگه آدرس بایپانی/Archive وبلاگ ما بصورت:
    http://clicksor.ir/weblog/index.php?archive=2007-sep
    باشه تبدیل میشه به:
    http://Persiandev.net/blog/2007-sep
    با کمی Regular Expression میتونید آدرس هاتون رو خیلی حرفه ای تر کنید و زیباتر...

    راهنمای دستورات :
    کد:
    Any single character
    [chars]     یکی ار کاراکترها میتونه این باشه برای مثال [A]
    [^chars]    هیج یک از این کاراکتر ها نباشه برای مثال [^A]
    text1|text2  همون کار or رو انجام میده

    Quantifiers:
    ?           میتونه یک کاراکتر باشه و یا هیچ کاراکتری
    *           هرچیزی میتونه باشه حتی اگه چیزی وجود نداشته باشه
    +           حداقل یک کاراکتر وجود دارد

    Grouping:
    (text)    برای ساختن گروه بکار میره

    Anchors:
    ^           شروع
    $           پایان

    Escaping:
    char        برای مثال برای درنظر نگرفتن علائمی مثل [] یا . یا غیره هست در این مواقع به عنوان دستور در نظر نمیگیره
    مثال:
    کد:
    Options +FollowSymlinks
    RewriteEngine On
    RewriteRule ^get(.*) /public/download/download.php$1
    در مثال بالا ما گفتیم هر ادرسی که بعد از download.php قرار گرفت تبدیلش کنه.
    مثال:
    http://clicksor.ir/downloads/download.ph...iavash.zip
    تبدیل میشه به:
    http://clicksor.ir/Get?myfile=Siavash.zip

    در مثال بعدی میخوایم دسترسی به پوشه ها رو از کاربر بگیریم:
    کد:
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^(.*)$ deny.php [nc]
    تو قسمت بالا اگه کاربر بخواد به هر نحوی وارد یه پوشه بشه منتقل میشه به deny.php
    بزارید در مثال بعدی کاری کنیم که فقط به فایل های خاصی دسترسی داشته باشه و بجز اون هر فایلی خواست باز کنه خطا بده:
    کد:
    Options +FollowSymlinks
    RewriteEngine On
    rewritecond %{REQUEST_FILENAME} !^(.+).css$
    rewritecond %{REQUEST_FILENAME} !^(.+).js$
    rewritecond %{REQUEST_FILENAME} !file.php$
    RewriteRule ^(.+)$ /deny/ [nc]
    تو دستور بالا ما گفتیم فقط به فایل های CSS JS و فایل file.php اجازه بده که توسط کاربر فراخوانی بشه در غیر اینصورت منتقل کنش به پوشه /deny/ .

    HotLinking مثال
    کد:
    Options +FollowSymlinks
    # no hot-linking
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http://(www\.)?clicksor\.ir/ [nc]
    RewriteRule .*.(gif|jpg|png)$ http://clicksor.ir/red.jpg [nc]
    خوب فکر نمیکنم زیاد لازم به توضیح باشه کد بالا هر درخواستی رو که برای لود کردن عکس با فرمت gif,jpg,png از یه وبسایت دیگه باشه عکس
    http://clicksor.ir/red.jpg نمایش داده میشه .

    اضافه کردن WWW به آدرس وبسایت:
    این کد این کار رو براتون میکنه :
    کد:
    Options +FollowSymlinks
    RewriteEngine on
    rewritecond %{http_host} ^www.clicksor.ir [nc]
    rewriterule ^(.*)$ http://clicksor.ir/$1 [r=301,nc]
    در واقع یه نوع انتقال هستش البته از نوع peremantly moved.

    ترجمه سایت:
    کد:
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^(.*)-fr$ http://www.google.com/translate_c?hl=fr&sl=en&u=http://clicksor.ir/$1 [r,nc]
    RewriteRule ^(.*)-de$ http://www.google.com/translate_c?hl=de&sl=en&u=http://clicksor.ir/$1 [r,nc]
    RewriteRule ^(.*)-es$ http://www.google.com/translate_c?hl=es&sl=en&u=http://clicksor.ir/$1 [r,nc]
    RewriteRule ^(.*)-it$ http://www.google.com/translate_c?hl=it&sl=en&u=http://clicksor.ir/$1 [r,nc]
    RewriteRule ^(.*)-pt$ http://www.google.com/translate_c?hl=pt&sl=en&u=http://clicksor.ir/$1 [r,nc]
    در کد بالا در صورتی که به آخر یک Link یا آدرس یکی از کلمات de , -fr , -pr, -it- اضافه بشه توسط گوگل میتونید ترجمه کنید.
    عوض کردن نوع لینک: برای مثال نوع آدرس عکس :
    کد:
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^pictures/(.*) http://clicksor.ir/getpicture.php?$1 [r]
    خاموش و روشن کردن RegisterGlobals جهت نصب برخی از برنامه ها:
    کد:
    php_flag register_globals on
    منبع: انجمن فری آفلاین
    (تصحیح شد)
    (آخرین ویرایش در این ارسال: ۱۳۸۸ ارديبهشت ۹ ۰۱:۲۹ عصر، توسط Y.P.Y.)
    ۱۳۸۸ ارديبهشت ۸ ۰۵:۵۳ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : oia Y.P.Y zoghal admin AHMADBADPEY sajjilove parvane Alimokhlesi faghani gmitw niman2d
    میلاد آفلاین
    برنامه نویس
    ***

    ارسال‌ها: 181
    تاریخ عضویت: ۱۳۸۷ بهمن ۲۵
    اعتبار: 2
    تشکرها : 66
    ( 136 تشکر در 74 ارسال )
    ارسال: #2
    RE: ترفندهای .htaccess
    پیشنهاد میکنم قسمت های کد را داخل تگ مربوطه قرار بدید تا پستتون قابل خوندن باشه.
    __________________________________________________________________________
    Two hands working can do more than a thousand clasped in prayer
    ۱۳۸۸ ارديبهشت ۹ ۱۲:۲۷ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : oia niman2d
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS