Saturday, February 22, 2014

htaccess файлыг тохируулах

.htaccess файлыг тохируулах

Веб сайтаа Apache сервер бүхий веб хост дээр анхлан байрлуулж байгаа хүмүүст mod_rewrite модультай ажиллах, файл хавтастай холбогдох тохиргоог өөрчлөн удирдах буюу .htaccess файлыг тохируулах гэдэг тун ч төвөгтэй бэрх ажил байдаг. За ингээд өөрийнхөө ашиглаж байгаа бас мэдээж хэнд ч хэрэг болохоор тохиргоонуудыг товч тайлбартайгаар хүргэе.

1. "galaa.mn/index.html" хүсэлтийг "galaa.mn" рүү шилжүүлэх

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
    RewriteRule ^index\.html$ http://galaa.mn/ [R=301,L]

2. "galaa.mn/index.php" хүсэлтийг "galaa.mn" рүү шилжүүлэх

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
    RewriteRule ^index\.php$ http://galaa.mn/ [R=301,L]

3. Бүх хуудсыг нэг хуудас руу тухайлбал "galaa.mn" рүү шилжүүлэх

    RewriteCond %{HTTP_HOST} ^galaa\.mn$
    RewriteRule ^index(.*)$ http://galaa.mn/ [L,R=301]

4. "www"-гүй холбоосуудыг "www"-тай болгох

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

5. "www"-гүй болгох

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

6. Зургийн файлуудыг hotlink-ээс хамгаалах

    RewriteCond %{HTTP_REFERER} !^http://(.+\.)?galaa\.mn/ [NC]
    RewriteCond %{HTTP_REFERER} !^$
    RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/no_hot_linking.jpe [L]

galaa.mn домэйн нэрийг өөрийнхөө сайтын домэйн нэрээр солихоо мартуузай.

Нэмж хэлэхэд mod_rewrite модулийг ашиглах бол htaccess файлын нэрийг ".htaccess" болгон өөрчлөхөд л хангалттай байдаг.

Дараах кодуудыг мэдээг нийтлэгдсэнээс хойш нэмж оруулсан болно.

7. Тодорхой файл уруу URL хаягаар дамжин шууд хандахыг хориглох

Жишээлбэл бүх "zip" файл уруу хандахыг хорьё гэвэл

    RewriteRule .*\.(zip|rar)$ - [F]

Энд .*\.(zip|rar)$ - .zip ба .rar төгсгөлтэй бүх URL хаягийг заасан хэв (regex) юм. Ер нь ганц энэ биш бусад зүйлд гэсэн ч regular expression ашиглагдаж байгааг харгалзан regular expression буюу хэв бичих тухай бичсэн өгүүллээ энд холбоё.

Дээрхийн адилаар хэв бичиж болохоос гадна зөвхөн тухайн нэг файлынхаа URL хаягийг ч бичиж өгч болно.

8. Хавтасны агуулгыг үзэхээс сэргийлэх

Зарим нэг хавтсанд хоосон index.html хуулахаа мартах ерөөсөө ингэж хуулах нь төвөгтэй ч байдаг. Тэгвэл үүнийг

    Options All -Indexes

9. GZip шахалтыг болиулах

Apache серверийн траффик хэмнэх болон хуудас ачаалагдах хурдыг нэмэгдүүлэх зорилготой энэ боломж файл татах үед асуудал үүсгэдэг. Ингээд ямар нэгэн файл татах үед gzip шахалтыг хорихын тулд

    SetEnvIfNoCase Request_URI ([A-Za-z0-9._-]+.[A-Za-z0-9]{1,4})$ no-gzip dont-vary

мөрийг htaccess файлдаа нэмж өгнө. Энд файлын нэрийг латин үсэг, цифр, цэг бас доогуур зураас харин файлын өргөтгөлийг латин үсэг ба цифрээс тогтоно гэж заалаа. Мөн файлын өргөтгөлийг нэгээс дөрвөн үсгийн урттайгаар заасныг анзаараарай.

10. Charset-ийг заах

Вебийнхээ charset-ийг htaccess дотор зааж өгч болдог. Үүний тулд

    AddDefaultCharset UTF-8

11. Сайтыг түр "унтраах"

Зарим үед сайтын өөрлчлөлт шинэчлэлтийг зочид хэрэглэгчдийг нэвтрүүлэхгүйгээр хийж гүйцэтгэх шаардлага гардаг. Энд бас хайлтын системийн аалзнуудыг бодолцох ёстой. Үүний тулд header дотроо 503 бүхий хариултыг өгөхөөр хийнэ. Ингэсэн тохиолдолд хайлтын систем тухайн сайтыг ахин шүүж үзэхээр тэмдэглэж үлдээдэг. Эсрэг тохиолдолд хайлтын системээс арчигдах аюултай.
Үүнийг mod_rewrite модулийн тусламжтайгаар шийдэх боломжтой.

    RewriteEngine on
    RewriteRule !offline.php$ http://galaa.mn/offline.php [R,L]

Энд байгаа offline.php файлын агуулга дараах маягтай байна.

    <?php
    header("HTTP/1.1 503 Service Unavailable");
    echo 'Сайтын зочид хэрэглэгчдэд өгөх мэдээлэл';
    ?>

Header дахь 503 чухал хэрэгтэйг дээр тэмдэглэснийг сануулъя.

12. Алдааны хуудсыг заах

Зочид хэрэглэгчид хуудасны хаягийг алдаатай бичих, эсвэл тухайн мэдээллийн хаяг өөрчлөгдсөн тохиолдолд 404 /Not Found/ алдаа өгөгддөг. Ийм алдаанд өгөх хариулт хуудсыг чамбай бэлдэх нь зочид хэрэглэгчдээ алдахгүй байхад тустай. Бас цөөнгүй тохиолддог 500 /Internal Server Error/ болон бусад алдааны хуудсуудыг өөрийн хүссэнээр заахдаа .htaccess файлыг ашигладаг. Үүний тулд дараах кодыг .htaccess файлдаа хадгалахад л хангалттай.

    ErrorDocument 400 /errors/badrequest.html
    ErrorDocument 401 /errors/authreqd.html
    ErrorDocument 403 /errors/forbid.html
    ErrorDocument 404 /errors/notfound.html
    ErrorDocument 500 /errors/serverr.html

Энд алдааны хуудсуудыг харгалзах нэртэйгээр үүсгэж "errors" хавтсанд хадгалсан гэж ойлгоно. Уг хавтас нь сайтын үндсэн хавтсанд тодруулбал, "http://galaa.mn/errors" гэх маягаар байрлана.

13. Хавтас ба файлыг нууц үгээр хамгаалах

Энэ нь веб сайтын аюулгүй байдлыг дээшлүүлэхэд тустай. Жишээлбэл админы хавтас, эсвэл зөвхөн тусгай эрхтэй хэрэглэгчдийн нэвтрэх хавтсуудыг нууц үгээр хамгаалсан тохиолдолд тухайн холбоосоор нээгдэх хуудас дуудагдахаас өмнө урьдчилан заагдсан нэр ба нууц үгийг асуудаг. Хэрэв нэр ба нууц үгийг буруу өгвөл 401 алдааг өгөөд нэвтрүүлэхгүй.

Ийм хамгаалалттай болохын тулд ердөө л дор өгөх зааврын дагуух агуулгатай ".htaccess" ба ".htpasswd" нэр бүхий текст төрлийн файл үүсгэж сервертээ байрлуулах юм.

    AuthName "Restricted Area"
    AuthType Basic
    AuthUserFile /home/web/galaamn/.htpasswd
    AuthGroupFile /dev/null
    require valid-user

Энд "/home/web/galaamn/" хавтсыг өөрийн серверийн замыг тооцсон хавтсаар солихыг анхаараарай. Энэ хавтас нь мэдээж бидний үүсгэх ".htpasswd" файлыг байрлуулах хавтас юм. Уг файлд хэрэглэгчийн нэр ба нууц үг хадгалагдах учраас веб сайтынхаа үндсэн замаас гадна байрлуулах нь оновчтой. Тодруулбал манай сайт "/home/web/galaamn/www_scribble/" хавтсанд байрлаж байгаа гэж санавал ".htpasswd" файлыг "/home/web/galaamn/" эсвэл ямар ч веб сайт байрлаагүй хавтсанд хадгална.

Одоо ".htpasswd" файлаа хаана байршуулахаа шийдээд ".htaccess" файлаа үүсгээд дискиндээ хадгалчихсан тул нэвтрэх нэр ба нууц үгээ ямар үгээр өгөхөө шийдэж улмаар ".htpasswd" файлаа үүсгэж хадгалъя. Жишээ болгон хэрэглэгчийн нэрийг "user" харин нууц үгийг "password" гэж авъя. Тэгвэл ".htpasswd" файл дараах агуулгатай байна.

    user:PWIdPD62BSS4w

Энд хэрэглэгчийн нэр ба нууц үг : буюу тодорхойлох цэгээр тусгаарлагддаг. Мөн нууц үгийг хувиргаж хадгалдаг. Ийм онлайн хувиргагч хэрэгслүүдийн нэг энд байна. Энд дэлгэрэнгүй тайлбар зөвлөмж англиар бий. Бас файлыг нууц үгээр хамгаалах боломжийг тусгасан байна.

Хэрвээ өөр хэрэглэгч нэмэхийг хүсвэл шинэ мөрнөөс нэр ба нууц үгийг нь өгнө.

Ингээд хоёр файлаа үүсгэсэн тул эдгээрээ сервер лүүгээ хуулах л үлдлээ. ".htpasswd" файлаа ".htaccess" файлдаа тодорхойлсон хавтсандаа, харин ".htaccess" файлаа нууц үгээр хамгаалахыг хүссэн хавтсандаа байрлуулна. Хэрвээ өөр хавтсыг хамгаалах бол энэ л ".htaccess" файлаа дотор нь хуулахад хангалттай.

14. Bot ба сайт хуулагч програмуудыг хорих

Нэг удаа манай сайтад IE5.5 нэртэй аалз мөлхөж орж ирсэнээс үүдэн энэ талаар судалсан юм. Элдэв янзын /хайлтын системээс бусад/ bot, веб сайт хуулагч програм бас цахим шуудангийн хаяг олборлогч програм зэргийн хандалтыг зогсоох нь веб хостын ачааллыг хөнгөрүүлэхэд тустай. Хэрвээ bandwidth хязгаартай веб хост бол дээрх буруу замын нөхдүүд хамаг bandwidth-ийг залгих аюултай. Үүнээс гадна серверийн хүчин чадлыг хэт ихээр ашигласнаар серверийг унах тохиолдол ч байдаг.

Ийм хамгаалалттай болохын тулд ердөө л дор өгөх зааврын дагуух агуулгатай ".htaccess" ба ".htpasswd" нэр бүхий текст төрлийн файл үүсгэж сервертээ байрлуулах юм.

    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]
    RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
    RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
    RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
    RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
    RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
    RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
    RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
    RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
    RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
    RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
    RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
    RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
    RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
    RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
    RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
    RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
    RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
    RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
    RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
    RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
    RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
    RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
    RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
    RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
    RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
    RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
    RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
    RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
    RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
    RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
    RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
    RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
    RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
    RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
    RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
    RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
    RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
    RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
    RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]
    RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
    RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
    RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]
    RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
    RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
    RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
    RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
    RewriteCond %{HTTP_USER_AGENT} ^Zeus
    RewriteRule ^.* - [F,L]

Дээрх кодыг ашигласнаар нэр заагдсан "нөхдүүдэд" 403 Forbidden алдааг өгөөд халгаахгүй байх болно. Жагсаалтад дээрх маягаар өөр bot ба програмуудыг нэмж тусгах боломжтой. Ерөөсөө robots.txt файл дахь зааврыг дагахгүй байгаа нөхдүүдийг "буруу гарынх" гэж үзээд дээрх жагсаалтад нэмэх нь зүйтэй. Хэрэглэгч бидний хувьд буруу гарын нөхдүүдийг илрүүлэх хамгийн энгийн арга бол веб сайтынхаа хандалтын статистик мэдээг нарийн нягталж үзэж байх явдал юм. Бас энэ талын мэдээлэл, жагсаалт бүхий сайт форумуудаас "буруу гарын нөхдүүдийг" олж мэдэж болно.

15. .htaccess файлыг нээж үзэхээс сэргийлэх

htaccess дотор чухам юу хийснээ бусдад мэдэгдүүлэхгүй байя гэвэл дараах мөрүүдийг нэмж өгнө.

    <Files .htaccess>
    order allow,deny
    deny from all
    </Files>

No comments: