نمایش Eror صفحات Php

چیجوری میشه با فایل .htaccses کاری کرد کهError (PHP) صفحات نمایش داده بشه

منظورم طرز استفاده از این فایل
ممنون میشم یک مثال بزنید
 

siavashmusic

Active Member
اگه یه جستجویی توی انجمن میکردی حتما به نتیجه میرسیدی با این لحاظ من برات کاملترین مبحث رو گذاشتم


فايلهاي .htaccess يا distributed configuration files كه شايد خيلي ديده باشيد در واقع فايلهاي مخصوص كنترل آپاچي هستن
كه روي يه شاخه و تمام زير شاخه هاي اون عمل مي كنن كه با وجود مورد استفاده بودن كمي محجور موندن . اين فايلها براي كاركرد در كنار فايلهاي معمولي html يا php قرار ميگيرن و نام اونها فقط .htaccess ميتونه باشه ( هر چند كه با دستبردن تو تنظيمات اصلي آپاچي ميشه اسمشونو عوض هم كرد)
اين فايلها از تگهاي مخصوص آپاچي استفاده ميكنن البته cgi script هم مي پذيرن
تو اين پست سعي ميكنم تعداد محدودي از كاربردها رو به زبان ساده بگم
چند تا نكته هست كه بايد بدونيد:
در ويندوز اجازه درست كردن فايل اصلي كه ما واسه فعاليتمون نياز داريم رو نميده چون .htaccess يه فايل بدون نام هست !!! اما با اين كد ساده php توي لوكال هاست هم ميتونيم اچتي اكسس رو ايجاد كنيم

و در آخر اينكه اگه يه حرف يا حتي يه space اينور و اونور بزنيد باعث server error ميشه و سايت بالا نمي ياد

[highlight]كاربرد اول- تغيير صفحات خطا[/highlight]

شما ميتونيد صفحات خطاي 404 يا 500 و ... رو به دلخواه خودتون طراحي و به اين طريق بشناسونيد

کد:
ErrorDocument 404 /404.html 
ErrorDocument 500 /500.html

توضيح: خيلي واضح هست ErrorDocument xxx /xxx.html

[highlight] كاربرد دوم-مخفي كردن فرمت ها ، شناساندن فرمتهاي جديد (add mime type) [/highlight]

يك راه امنيتي كه من واقعا پيشنهاد ميكنم واسه حفاظت از اسكريپت هاي php شما اينه كه اونا php نباشن !! بله يعني مثلا asp يا jsp باشن اينطوري هكرا واقعا گيج ميشن

کد:
AddType application/x-httpd-php .asp .jsp

توضيح: اول Addtype ميگه كه ما ميخوايم يه فرمت جديد بشناسونيم بعد نوع اون فايلهاي خاص با فرمت دلخواهمونو ميگيم مثلا image/png يا text/css بعد ميگيم كه چه فرمتي رو از اين به بعد به عنوان نوعي كه گفتيم بشناس
اما فرض كنيد ميخوايد از shtml , ssl در سايتتون استفاده كنيد و نياز به شناساندن اين فرمتها به آپاچي داريد :

کد:
AddType text/html .shtml 
AddHandler server-parsed .shtml 
Options Indexes FollowSymLinks Includes

[highlight] كاربرد سوم - از index.php يا index.html خسته نشديد؟ [/highlight]

با اين كد هم ميشه به وب سرور امر كرد كه كدام فايل به عنوان صفحه نخست و به قولي ايندكس به درخواست دهنده فرستاده بشه

homearea.php رو به هر فايلي با هر نامي تغيير بديد.
توضيح: خيلي واضح DirectoryIndex يه فاصله و بعد هر نام فايلي با هر فرمتي

[highlight] كاربرد چهارم - redirect يا برو همونجايي كه من ميگم ...[/highlight]

کد:
Redirect /Dirold/old.html http://site.com/DirNew/new.html

توضيح: در اينجا ما ميگيم كه مرورگري كه درخوست فايل old.html رو در شاخه dirold داشت بره به آدرس http://site.com/DirNew/new.html


[highlight] كاربرد پنجم - تامين امنيت با IndexIgnore [/highlight]

اين يكي ديگه يه شگرد امنيتي خيلي عاليه
درصد بالايي از هكرها بعد از نفوذ با browse كردن در دايركتوريهاي سايت شما و گشتن به دنبال فولدرها يا فايلها با پرميشن مطلوب كارشونو تكميل ميكنن و البته خيلي ها از اول از روش ديد زدن فولدرهايي كه حاوي موتور اسكريپت ها و اطلاعات با ارزشي هستن مثلا فايل config رو در بردارن به سايت نفوذ ميكنن
برنامه نويسا و php كارها واسه جلوگيري از اين كار ميان و يه index.html خالي درست ميكنن اما با اين كد ميشه يه صفحه مربوط به خالي بودن فولدر رو نشون داد يعني هيچي تو اين شاخه نيست در حالي كه شاخه ميتونه پر فايل باشه ...

کد:
IndexIgnore *
توضيح: واضحه ديگه ولي اگه مثلا خواستيد فقط يه نوع فايل محافظت شه مثلا فقط فايلهاي pdf مينويسييد :

کد:
IndexIgnore application/pdf

[highlight] كاربرد ششم - DefaultCharset [/highlight]

خسته نشديد از بس بالاي صفحاتتون Charset فارسي (utf-8 يا windows-1256) رو ست كرديد؟ خوب با اين كد كوتاه شما به آپاچي محترم ميگين كه هميشه صفحات رو با يه charset خاصي ارسال كن

کد:
AddDefaultCharset utf-8

كاربرد هفتم - deny from all

اين يكي بيشتر واسه فايل هايي به كار ميره كه حاوي اطلاعات با ارزشين ولي محافظت نميشن ( مثلا mt-config.cgi ) اين كد ميگه كه هيچ مرورگر ي نتونه سورس اينها رو ببينه

کد:
<Directory /> 
Order Deny,Allow 
Deny from All 
</Directory>

البته میشه این دسترسی رو فقط واسه یه آی پی محدود کرد

کد:
order allow,deny 
deny from 123.45.6.7 
deny from 012.34.5. 
allow from all

[highlight] كاربرد هشتم - محدود كردن يك عمليات خاص [/highlight]

اينم دو تا كد امنيتيه ديگه كه خيلي ميتونه تو دست و پاي هكرا بپيچه
کد:
<Limit POST PUT DELETE> 
</Limit>
كارش فكر كنم مشخص باشه
کد:
<LimitExcept POST GET> 
</LimitExcept>

شما به بومبرينگ اعتقاد داريد ؟ اين كد جلوي FSOCKOPEN و جوجه هكرا رو ميگيره

- [highlight] كاربرد نهم rewrite engine [/highlight]

اول از همه Apache RewriteEngine بايد در وب سرور شما فعال باشه .
اگه دسترسي داريد ميتونيد اين خط رو در httpd.conf اضافه كنيد :

کد:
LoadModule rewrite_module modules/mod_rewrite.so

اگرم بهش دسترسي نداريد با توجه به اين كه هاستينگاي ايران همه ريسيلر سوم چهارمن !!! اين كد هم شايد بتونه كار كنه بايد تو همون اچتي اكسس كپي كنيد
کد:
<IfDefine ReverseProxy> 
LoadModule rewrite_module modules/mod_rewrite.so 
LoadModule proxy_module modules/libproxy.so 
</IfDefine>

اگه از easyphp يا xampp واسه لوكال استفاده ميكنيد از سرچ ويندوز واسه پيدا كردن فايل httpd.conf استفاده كنيد و بعد همون خط رو بش اضافه كنيد.

اين همون چيزيه كه واسه ساب دومين مجازي هم به كار ميبريم من يه مثال سادشو واستون ميزنم
فرض كنيد يه وبلاگ داشتيد با اين آدرس http://www.persiantools.com/ehsan
حالا بلاگتون آدرسش عوض شده به اين http://www.persiantools.com/knowhow
البته دقت داشته باشيد اين هيچ ربطي به redirct نداره

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

یکی از بهترین امکاناتی که اپاچی بهتون میده بهش mod_rewrite هستش که باعث میشه سایتتون خیلی تمیزتر بنظر بیاد و به عبارتی SEO بشه !!!
تو هرجایی که شما بخواید از mod_rewrite استفاده کنید نیاز دارید که کد

کد:
Options +FollowSymlinks 
 RewriteEngine on

رو در فایل تون قرار بدید
بزارید یک مثال بزنم , میخوایم تمام صفحات پی اچ پی رو تبدیل کنیم به اچ تی ام ال :

کد:
Options +FollowSymlinks 
 RewriteEngine on 
 RewriteRule ^(.*).htm$ $1.php [nc]

در دستور بالا ما گفتیم هر فایل که فرمتش پی اچ پی بود تبدیلش کن به .htm ولی این دلیل براین نیست که فرمت فایل عوض میشه نه!!! بلکه به هردو صورت دسترسی به فایل امکان پذیر هست برای مثال اگه یه فایل file.php داشته باشیم هم میتونیم با اسم file.htm بهش دسترسی پیدا کنیم و هم از file.php .
[nc] : این دستور یعنی No Case یا همون case-insensitive

خوب فرض کنید اسم دومینمون رو عوض کردیم ولی فایل هامون همون قبلی ها هستن و میخوایم هرکسی تو دومین اولی یک فایل رو فراخوانی کرد ما همون فایل رو تو دومین دوم صدا بزنیم اینجور عمل میکنیم :

کد:
Options +FollowSymlinks 
 rewriteengine on 
 rewriterule ^(.+).htm$ http://persiandev.net/$1.php [r=301,nc]

301 یعنی مستقیما ریدایرکت شده , دستور بالا زمانی خوبه که یه سایت قدیمی داریم حالا میخوایم update کنیم با این کار حتی موتور های جستجو خودشون اتوماتیک اپدیت میکنن لینک رو !!!
بزارید یخورده جذاب تر کنیم , به این کد نگاه کنید

کد:
Options +FollowSymlinks 
 RewriteEngine on 
 RewriteRule ^myfiles/(.+)/(.+).zip download.php?section=$1&filename=$2 [nc]

بزارید ساده بگم اگه شما عبارت (.+) رو مساوی با 1$ فرض کنیم ( 1$=(.+) )ما میتونیم چندین بار از این عبارت استفاده کنیم به این صورت که بار اول که از (.+) استفاده میکنیم مساوی با 1$ میگیریم در دفعه دوم مساوی با 2$ میگیریم و همینطور الا اخر .
در مثال بالا برای مثال اگه ما یه فایل در مسیر
کد:
http://Persiandev.net/download.php?section=appz&filename=Mehdi

داشته باشیم این لینک از ادرس زیر هم در دسترس خواهد بود :

کد:
 http://Persiandev.net/myfiles/appz/Mehdi.zip

بزارید یه مثال دیگه از همین نوع بزارم :
کد:
Options +FollowSymlinks 
 RewriteEngine on 
 RewriteRule ^blog/([0-9]+)-([a-z]+) http://Persiandev.net/blog/index.php?archive=$1-$2 [nc]

حالا اگه ادرس ارشیو وبلاگ ما بصورت :

کد:
http://Persiandev.net/blog/index.php?archive=2006-aug
باشه تبدیل میشه به :

کد:
http://Persiandev.net/blog/2006-aug

به همین سادگی میبینید که با کمی 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://Persiandev.net/downloads/download.php?myfile=Mehdi.zip

تبدیل میشه به :

کد:
 http://Persaindev.net/Get?myfile=Mehdi.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]

تو دستور بالا ما گفتیم فقط به فایل های سی اس اس و جی اس و فایل file.php اجازه بده که توسط کاربر فراخوانی بشه در غیر اینصورت ریدایرکت کنش به پوشه /deny/ .
بزارید تو مثال بعدی قضیه HotLinking رو بگیم :

کد:
Options +FollowSymlinks 
 # no hot-linking 
 RewriteEngine On 
 RewriteCond %{HTTP_REFERER} !^$ 
 RewriteCond %{HTTP_REFERER} !^http://(www\.)?Persiandev\.net/ [nc] 
 RewriteRule .*.(gif|jpg|png)$ http://Persiandev.net/hotlink.gif [nc]

خوب فکر نمیکنم زیاد لازم به توضیح باشه کد بالا هر درخواستی رو که برای لود کردن عکس با فرمت gif,jpg,png از یه سایت دیگه باشه عکس http://Persiandev.net/hotlink.gif نمایش داده میشه .

اضافه کردن WWW به ادرس سایت :
این کد این کار رو براتون میکنه :

کد:
Options +FollowSymlinks 
RewriteEngine on 
rewritecond %{http_host} ^www.Persiandev.net [nc] 
rewriterule ^(.*)$ http://Persiandev.net/$1 [r=301,nc]

در واقع یه نوع ریدایرکت هستش البته از نوع peremantly moved .

ترجمه سایت :

کد:
Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^(.*)-fr$ http://www.google.com/translate_c?hl=fr&sl=en&u=http://Persiandev.net/$1 [r,nc] 
RewriteRule ^(.*)-de$ http://www.google.com/translate_c?hl=de&sl=en&u=http://Persiandev.net/$1 [r,nc] 
RewriteRule ^(.*)-es$ http://www.google.com/translate_c?hl=es&sl=en&u=http://Persiandev.net/$1 [r,nc] 
RewriteRule ^(.*)-it$ http://www.google.com/translate_c?hl=it&sl=en&u=http://Persiandev.net/$1 [r,nc] 
RewriteRule ^(.*)-pt$ http://www.google.com/translate_c?hl=pt&sl=en&u=http://Persiandev.net/$1 [r,nc]

در کد بالا در صورتی که به اخر یک لینک یا ادرس یکی از کلمات de , -fr , -pr, -it- اضافه بشه توسط گوگل میتونید ترجمه کنید .
عوض کردن نوع لینک برای مثال نوع ادرس عکس :

کد:
Options +FollowSymlinks  
RewriteEngine on  

RewriteRule ^pictures/(.*) http://Persiandev.net/getpicture.php?$1 [r]

روشن خاموش کردن رجیستر گلوبال

کد:
php_flag register_globals on

امیدوارم مفید واقع بشه

با تشکر ازsayrex کاربر فروم (www.forum.irani.ch) بابت جمع آوری مقالات
 

جدیدترین ارسال ها

بالا