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

کمی درباره آپاچی و چند دستور کلیدی در آپاچی برای صاحبان سایت و سرور

مقدمه

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

در کارکرد آپاچی

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

این نامه گردان اصلا با متحوای نامه شما کار نداره.
آدم گیری هم هستش اشتباه آدرس بدی یا بد خط باشی خبری از جواب صحیح نیست
ولی خیلی دقیق هستش
کمی هم تنبل هستش

خب با این مثال تقریبا مشخص شد که آپاچی چی کار میکنه خب اجازه بدین فنی تر صحبت کنیم. آپاچی با توجه  به  header های دریافتی ادرس ها رو دریافت می کنه و به php پاس میده اگر پاسخی داشت php برمیگردونه (پس php به تنهایی قابل اجرا نیست) یعنی همون نامه هه خب ما یه هدر رو همینجوری آزمایشی نگاه می کنیم:

برای آدرس:

https://4xmen.ir/category/%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B9%D8%A7%D9%85%D9%84/%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3/

GET /category/%d8%b3%db%8c%d8%b3%d8%aa%d9%85-%d8%b9%d8%a7%d9%85%d9%84/%d9%84%db%8c%d9%86%d9%88%da%a9%d8%b3/ HTTP/1.1
Host: 4xmen.ir
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,fa;q=0.6
Referer: https://4xmen.ir/
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Length: 28449
Content-Type: text/html; charset=UTF-8
Date: Sun, 10 Jan 2016 06:57:08 GMT
Server: Apache
Vary: User-Agent,Accept-Encoding

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

حالا پاسخ از آپاچی:

HTTP/1.1 200 OK
Date: Fri, 28 Apr 2017 07:25:12 GMT
Server: Apache
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Link: <https://4xmen.ir/wp-json/>; rel="https://api.w.org/"
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 35302
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
  • نسخه پروتکل
  • زمان ارسال
  • انکدینگ محتوا
  • مشخص میکنه سرور آپاچی هستش
  • زمان انقضای صفحه
  • اطلاعات مربوط به کش
  • طول اطلاعات ارسالی
  • نوع محتوا
  • و بعد محتوای ارسالی از php

خب پس دیدین این درخواست ها چطور ارسال و پاسخ ها دریافت میشن.

پس هر موقع ما بخوایم این درخواست ها رو عوض کنیم مراجعه می کنم به آپاچی.

تغییرات در آپاچی چطور انجام میشود.

ساده ترین روش این هستش شما بدون دستکاری پیکربندی ( config ) با فایل های htaccess این کار رو انجام بدین . فایل htaccss معمولا در فولدر فعلی و زیر مجموعه هاش به خوبی جواب میده و در جا هم جواب میده نیازی نیست ۳ ساعت از روش بگذره اگر تغییرات رو انجام دادین و کار نکرد کدتون ایراد دارد نیاز به صبر کردن نمی باشد. ( یادمه اون اوایل برای هر تست چون نمیدونستم ساعت ها صبر می کردم یعنی پوستی از ما کنده شد ها :D)

نکته: اما این فایل ها در لینوکس غیر قابل نمایش میباشند باید فایل های مخفی به نمایش در بیاورید تا این فایل ها رو ببنید. یه بهتر بگیم هر فایل و فولدری که با . یا نقطه شروع میشه مخفی هستش.

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

<IfModule mod_rewrite.c>

# your code here

</IfModule>

قرار بدین در فایل های htaccess مثال خط وسط بالا هر خطی با # شروع شود کامنت هستش و  در عملیات اعمال نمیشوند.

و در صورت اشتباه مهلک ارور ۵۰۰ معمولا نمایش داده میشود.

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

دستور نمایش و عدم نمایش error در php

php_flag display_errors on

اگر مقدار رو on کنید خطا ها در php نمایش داده میشوند و برعکس اگر این مقدار رو off کنید باعث میشه خطا ها نمایش داده نشوند.

دستور برای عدم لیست شدن فایل ها در پوشه هایی که index ندارند:

IndexIgnore *

برای عدم نمایش همه چیز حتی فولدر ها

برای فقط چندین پسوند:

IndexIgnore *.zip *.jpg *.gif

برای غیر فعال کردن کلی این حالت :

Options +Indexes

تغییر صفحه پیش فرض از index

همیشه در آپاچی صفحه پیش فرض index نام دارد و معمولا index.html به index.php الویت داره حالا اگر  دوست داشته باشیم این اسم رو عوض کنیم به همین سادگی میتونیم :

DirectoryIndex 4xmen.html

میتونید چندین پیش فرض با اولیت تعریف کنید:

DirectoryIndex 4xmen.html  default.php myfile.py index.cgi

اولیت با سمت چپ تر هستش.

غیر فعال کردن عملکرد فایل های php

php_flag engine off

به همین سادگی میتوین این رو محدود به فایل هم بکنید:

<Files index.php>
php_flag engine off
</Files>

پسوند های دیگر با عنوان  php  اجرا شوند

مثلا برای کلاه بر دارا این خیلی خوبه مشتری نادان بخوره به تورت بگه من میخوام سایتم با asp.net باشه ابتدا فایل های php  رو به aspx تبدیل می کنی و بعد کد زیر رو میزنی:

<Files *.aspx>
php_flag engine on
</Files>

به همین سادگی

rewrite مهمترین بحث های apache میباشد

redirect یعنی چی: یعنی بازدیدکننده رو به زور به یک صفحه ی دیگر بفرستید، اما rewrite علاوه بر redirect میتونه اطلاعات اون رو بفرستین به صفحه ی دیگری کد زیر توجه کنید:

<IfModule mod_rewrite.c>

# redirect Virtual address to index php.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?myvar=$1 [QSA,L]
 
</IfModule>

خب خط اول و آخر مشخص هستش در بالا توضیح دادیم
و بعد یک توضیح اضافه شده
سپس موتور RewriteEngine رو روشن میکنید
بعد هر خطی که با RewriteCond شروع میشه یعنی شرط برای rewrite هستش در اینجا سه تا شرط ذکر شده یعنی اگر فایل درخواست شده نه directory که با منات -d نمایش داده میشه نه فایل که نمادش -f می باشد و نه لینک که شبیه میانبر در لینوکس است -l نمادش میباشد باشد یعنی شامل هیچ یک نشه به شما اجازه rewrite صادر میشه و در خط RewriteRule نحوه rewirte رو مشخص میکنید در مثال بالا $۱ یعنی اون فایلی درخواست شده که میفرستیم به index.php با نام متغییر myvar و شما در صفحه index اگر ۳ شرط بالا برقرار بود میتونین با :

print_r($_GET['myvar']);

نتیجه رو ببنید.

redirect

که توضیح داده شد هدایت اجباری به صفحه دیگر میباشد فرض کنید شما میخواین آدرس سایتتون حتما با www شروع بشه باز هم باید rewrite کنید به این شیوه:

RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

در خط اول کد ما آدرس هایی که با example.com شروع شدن و www ندارند و توسط RewriteRule هدایت میکنیم به همون آدرس که $۱ نمادش هستش فقط یه www ابتداش اضافه میکنیم توجه داشته باشید RewriteEngine باید روشن باشد.

این چند دستور ساده و کلیدی امیدوارم مفید واقع بشه


انتشار

در

توسط

برچسب‌ها:

نظرات

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *