با فایل .htaccess کنترل را در دست بگیرید – قسمت دوم

مهر ۱۲م, ۱۳۸۸

در ادامه بحث Authorization می‌خوام دو تا از دستوراتی را معرفی کنم که شبیه دستورات شرطی عمل می‌کنند. اولین <Files></Files> و دیگری <Directory></Directory> است. Filesبر روی فایل‌ها و Directory بر روی شاخه‌ها اعمال می‌شوند. به مثال زیر توجه کنید:

<Files *.jpg>

Order Allow,Deny

                             Allow from 123.123.123.123

</Files>

 

با این دستور، و البته با فرض اینکه IP سرور شما ۱۲۳/۱۲۳/۱۲۳/۱۲۳ باشد، شما اجازه استفاده از عکس ها را فقط به سرور خود میدهید. در این صورت اگر در سرورهای دیگر عکسی با منبع سایت شما داشته باشند، سرور شما از نمایش آن جلوگیری خواهد کرد. با این روش شما از افتادن ترافیک سایت‌های دیگر بر دوش سرور خود جلوگیری می‌کنید. یا یک مثال کاربردی‌تر اینکه

<Files *.php>

                             Order Allow,Deny

</Files>

با این کار از اجرا و نمایش تمام فایل های php جلوگیری می‌کنید. البته نکته مهمی وجود دارد و آن این است که برای دستوراتی شبیه require و include در برنامه نویسی مشکلی از نظر دسترسی پیش نخواهد آمد. اما اگر به جای PHP تمام فایل‌ها را در این ماجرا شریک کنید (توسط*.* ) ، نمی توانید فایل‌های CSS یا JS را در برنامه خود استفاده کنید. چون این فایل‌ها توسط مرورگر شناسایی شده و درخواست آنها صادر می‌شود (برخلاف php که موقع اجرا توسط آپاچی اضافه می‌شوند.)

 

Redirect 

انتقال شاخه‌ به مسیر جدید به دو حالت صورت می‌گیرد؛ شکل ساده و شکل دارای عبارت منظم. این انتقال توسط کد ۳۰۱ به مرورگر ارسال شده است. در صورتی که این کد نوشته نشود، بصورت پیش‌فرض ۳۰۲ ارسال خواهد شد. این کدها از نظر موتورهای جستجوگر بسیار مهم است و کسانی که روی سئو SEO یا Search Engine Optimization کار می‌کنند باید به این‌ها نیز توجه کنند.

Redirect 301 /olddir/oldfile.html http://example.com/newdir/newfile.html

RedirectMatch 301 /oldDir/(.*) /newDir/$1

 

۳۰۱ – Moved Permanently یا انتقال دائمی. در صورتی که برای همیشه از مسیر جدید استفاده خواهید کرد، حتما” توسط کد ۳۰۱ صفحه را ارسال کنید. با این کار موتورهای جستجو آدرس جدید را بجای آدرس قبلی قرار خواهند داد.

۳۰۷ – Temporary Redirect یا انتقال موقت.
مدیریت خطاها (Error Handling)

لیست کاملی از خطاهایی که میتوانید به جای نمایش آنها، این صفحات را برای خود سفارشی کنید:

ErrorDocument 400 /errors/file.php?error=400
ErrorDocument 401 /errors/file.php?error=401
ErrorDocument 402 /errors/file.php?error=402
ErrorDocument 403 /errors/file.php?error=403
ErrorDocument 404 /errors/index.php?error=404
ErrorDocument 405 /errors/index.php?error=405
ErrorDocument 406 /errors/index.php?error=406
ErrorDocument 407 /errors/index.php?error=407
ErrorDocument 408 /errors/index.php?error=408
ErrorDocument 409 /errors/index.php?error=409
ErrorDocument 410 /errors/index.php?error=410
ErrorDocument 411 /errors/index.php?error=411
ErrorDocument 412 /errors/index.php?error=412
ErrorDocument 413 /errors/index.php?error=413
ErrorDocument 414 /errors/index.php?error=414
ErrorDocument 415 /errors/index.php?error=415
ErrorDocument 416 /errors/index.php?error=416
ErrorDocument 417 /errors/index.php?error=417
ErrorDocument 500 /errors/index.php?error=500
ErrorDocument 501 /errors/index.php?error=501
ErrorDocument 502 /errors/index.php?error=502
ErrorDocument 503 /errors/index.php?error=503
ErrorDocument 504 /errors/index.php?error=504
ErrorDocument 505 /errors/index.php?error=505

در مواقع رخ دادن هرکدام از این خطاها، صفحه به آدرس مورد نظر ارجاع داده خواهد شد. در ضمن میتوانید یک پیغام را نمایش دهید:

ErrorDocument 404 “<b>Page Not Found</b>”

 

تنظیمات PHP (php.ini) 

فلگ‌ها توسط php_flag و مقادیر توسط php_value کنترل می‌شوند.نمونه‌هایی را در زیر می‌بینید:

php_flag asp_tags off
php_flag register_globals off
php_flag session.auto_start on
php_flag display_errors off
php_value upload_max_filesize 8M
php_value session.cookie_lifetime 3600

 

گروه دستورات بعدی توسط ماژول mod_mime اجرا می‌شوند و فایل مبدأ آنها mod_mime.c است. این ماژول امکاناتی را برای مشخص کردن تایپ فایل‌ها و مشخصات آنها فراهم می‌آورد.(در واقع محتوای Header هدر صفحه کنترل می‌شود.)

AddDefaultCharset utf-8

AddCharset windows-1256 .html

AddLanguage fa .php

اگر واقعا” از نوشتن متاتگ برای ست کردن charset خسته شده‌اید، خط اول بسیار به کار شما می‌آید. AddCharset نیز charset مورد نظر را فقط برای پسوند خاصی ست می‌کند. AddLanguage نیز زبان فارسی (یا مخفف آن fa) را به Content-Language در Header صفحات پی اچ پی اضافه میکند.

AddEncoding x-gzip .gz
AddEncoding x-compress .z

این دستور نیز برای ست کردن Content-Encoding هدر بکار می‌رود.

 

AddType image/gif .photo

AddType application/x-httpd-php .asp .jsp

AddType text/css .mycssext

خب این قسمت خیلی جذاب و کاربردی است. شما توسط AddType یک تایپ جدید یا پسوند جدید تعریف می‌کنید. با این کار هکرها به راحتی متوجه php بودن کد شما نمی‌شوند. (البته اگر مسائل دیگری مثل X-Powered-By را درنظر گرفته باشید!!) برای مثال من در خط اول، پسوندهای photo را عکس‌های gif معرفی کرده‌ام. خط دوم، خواسته‌ام که تمام فایل‌هایی با پسوند asp یا jsp نیز از نوع  phpشناخته شوند و توسط مترجم php اجرا شوند. در نهایت گفته‌ام که پسوندهایی mycssext فایل‌های مربوط به css هستند. بعنوان مثال شاید کاربرد این دستور را در سایت بانک ملت (فایل‌هایی با پسوند bm) دیده باشید!

<Location /images>

    ForceType image/gif

</Location>

درصورتی که فایل‌های شاخه images توسط مرورگر درخواست شوند، جدای از پسوند آنها، مرورگر مجبور به پردازش آنها بعنوان عکس با پسوند gif خواهد بود.

Posted in دسته‌بندی نشده‌ها | Comments (۲)

۲ Responses to “با فایل .htaccess کنترل را در دست بگیرید – قسمت دوم”

  1. سید امیر Says:

    سلام سید

    شما هم انگاری مثل من زیاد وقت نمیکنی به روز رسانی کنی.

    موفق باشی

  2. ALI Says:

    سلام
    خیلی اموزش خوبی بود.

    لطفا در مورد php_flag ها بیشتر توضیح بدید.

    مثل اینا:

    RewriteRule ^(.*/)?files/$ index.php [L]
    RewriteCond %{REQUEST_URI} !.*wp-content/plugins.*
    RewriteRule ^(.*/)?files/(.*) wp-content/blogs.php?file=$2 [L]

    # add a trailing slash to /wp-admin
    RewriteCond %{REQUEST_URI} ^.*/wp-admin$
    RewriteRule ^(.+)$ /$1/ [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule . – [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-.*) $2 [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L,NC]

    منظور:
    [L,NC]
    است که داخل
    []
    قرار میگیرند.

Leave a Reply