.htaccess файл дахь тохируулгуудаас
Apache веб серверийн .htaccess файл дахь зарим үндсэн тохируулгуудын тухай
Веб сайтаа Apache сервер бүхий веб хост дээр анхлан байрлуулж байгаа хүмүүст Apache серверийн mod_rewrite, mod_expires, mod_headers, mod_deflate болон бусад модулуудтай ажиллах, файл хавтастай холбогдох тохиргоог өөрчлөн удирдах буюу .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://galaa.mn/$1 [R=301,L]
6. "www" болон бусад бүх дэд домэйнийг үндсэн домэйн хаяг уруу чиглүүлэх
RewriteCond %{HTTP_HOST} ^(.+)\.galaa\.mn$ [NC]
RewriteRule ^(.*) http://galaa.mn/$1 [L,R]
эсвэл
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
7. Зургийн файлуудыг 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" болгон өөрчлөхөд л хангалттай байдаг.
Дараах кодуудыг мэдээг нийтлэгдсэнээс хойш нэмж оруулсан болно.
8. Тодорхой файл уруу URL хаягаар дамжин шууд хандахыг хориглох
Жишээлбэл бүх "zip" файл уруу хандахыг хорьё гэвэл
RewriteRule .*\.(zip|rar)$ - [F]
Энд .*\.(zip|rar)$ - .zip ба .rar төгсгөлтэй бүх URL хаягийг заасан хэв (regex) юм. Ер нь ганц энэ биш бусад зүйлд гэсэн ч regular expression ашиглагдаж байгааг харгалзан regular expression буюу хэв бичих тухай бичсэн өгүүллээ энд холбоё.
Дээрхийн адилаар хэв бичиж болохоос гадна зөвхөн тухайн нэг файлынхаа URL хаягийг ч бичиж өгч болно.
9. Хавтасны агуулгыг үзэхээс сэргийлэх
Зарим нэг хавтсанд хоосон index.html хуулахаа мартах ерөөсөө ингэж хуулах нь төвөгтэй ч байдаг. Тэгвэл үүнийг
Options All -Indexes
гээд л шийдчихнэ.
10. GZip шахалтыг болиулах
Apache серверийн траффик хэмнэх болон хуудас ачаалагдах хурдыг нэмэгдүүлэх зорилготой энэ боломж файл татах үед асуудал үүсгэдэг. Ингээд ямар нэгэн файл татах үед gzip шахалтыг хорихын тулд
SetEnvIfNoCase Request_URI ([A-Za-z0-9._-]+.[A-Za-z0-9]{1,4})$ no-gzip dont-vary
мөрийг htaccess файлдаа нэмж өгнө. Энд файлын нэрийг латин үсэг, цифр, цэг бас доогуур зураас харин файлын өргөтгөлийг латин үсэг ба цифрээс тогтоно гэж заалаа. Мөн файлын өргөтгөлийг нэгээс дөрвөн үсгийн урттайгаар заасныг анзаараарай.
11. Charset заах
Вебийнхээ charset-ийг htaccess дотор зааж өгч болдог. Үүний тулд
AddDefaultCharset UTF-8
12. Сайтыг түр "унтраах"
Зарим үед сайтын өөрлчлөлт шинэчлэлтийг зочид хэрэглэгчдийг нэвтрүүлэхгүйгээр хийж гүйцэтгэх шаардлага гардаг. Энд бас хайлтын системийн аалзнуудыг бодолцох ёстой. Үүний тулд 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 чухал хэрэгтэйг дээр тэмдэглэснийг сануулъя.
13. Алдааны хуудас заах
Зочид хэрэглэгчид хуудасны хаягийг алдаатай бичих, эсвэл тухайн мэдээллийн хаяг өөрчлөгдсөн тохиолдолд 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" гэх маягаар байрлана.
14. Хавтас болон файлыг нууц үгээр хамгаалах
Энэ нь веб сайтын аюулгүй байдлыг дээшлүүлэхэд тустай. Жишээлбэл админы хавтас, эсвэл зөвхөн тусгай эрхтэй хэрэглэгчдийн нэвтрэх хавтсуудыг нууц үгээр хамгаалсан тохиолдолд тухайн холбоосоор нээгдэх хуудас дуудагдахаас өмнө урьдчилан заагдсан нэр ба нууц үгийг асуудаг. Хэрэв нэр ба нууц үгийг буруу өгвөл 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" файлаа дотор нь хуулахад хангалттай.
15. 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 файл дахь зааврыг дагахгүй байгаа нөхдүүдийг "буруу гарынх" гэж үзээд дээрх жагсаалтад нэмэх нь зүйтэй. Хэрэглэгч бидний хувьд буруу гарын нөхдүүдийг илрүүлэх хамгийн энгийн арга бол веб сайтынхаа хандалтын статистик мэдээг нарийн нягталж үзэж байх явдал юм. Бас энэ талын мэдээлэл, жагсаалт бүхий сайт форумуудаас "буруу гарын нөхдүүдийг" олж мэдэж болно.
16. .htaccess файлыг нээж үзэхээс сэргийлэх
htaccess дотор чухам юу хийснээ бусдад мэдэгдүүлэхгүй байя гэвэл дараах мөрүүдийг нэмж өгнө.
<Files .htaccess>
order allow,deny
deny from all
</Files>
17. "index.php?"-ийг URL-аас арилгах буюу нуух
Энэ зөвхөн htaccess ба rewrite модулаар буюу дор бичсэн кодоор бүрэн шийдэгдэхгүй.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([a-zA-Z0-9-._]+)$ index.php?$1 [QSA,L,NC]
Жич: Дээр QUERY_STRING-ийг Латин цагаан толгойн жижиг болон том үсгүүд бас араб тооны цифрүүд, - . _ тэмдэгтүүдээс тогтоно гэж тооцож бичсэн болно.
"index.php?"-ийг хаягаас зайлуулахын тулд PHP код дээрээ үүсгэж байгаа URL-аа index.php?-гүй үүсгэх ёстой. Өөрөөр хэлбэл HTML хуудсаа index.php-гүй үүсгэнэ. Энэ тохиолдолд index.php-гүй URL-ийг rewrite модул автоматаар index.php-тэй болгож өгснийг нь веб аппликэшн чинь уншина.
Харин index.php-тэй url ирвэл түүнийг нь index.php-гүй болгож засаад redirect хийнэ.
18. Text, HTML, JavaScript, CSS, and XML файлуудыг шахах
Энэ талаар анхны ойлголтыг 9 дүгээр зүйлд өгсөн. Үүнийг гүйцэлдүүлэхэд ашиглаж болох хэд хэдэн нэмэлт модул байдгаас mod_deflate модулыг онцлон авч үзье.
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript application/xml application/xhtml+xml application/rss+xml image/svg+xml
</ifmodule>
Энд дээрх файлын төрлүүдийг "internet media type" дахь нэршлээр зааж өгч байна.
19. Cache-ийг идэвхжүүлэх, удирдах
Зургийн файлууд, CSS, JS ба pdf, flash, favicon зэрэг файлуудыг кэш-лэснээр веб хуудасны ачаалагдах хурд нэмэгдэнэ гэж веб хуудасны хурд тестлэгч сайтуудад зөвлөж бичсэн байдаг. Үүнийг mod_expires модулийн тусламжтайгаар хэрэгжүүлж болдог.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 7 days"
ExpiresByType image/jpeg "access 7 days"
ExpiresByType image/gif "access 7 days"
ExpiresByType image/png "access 7 days"
ExpiresByType image/svg+xml "access 7 days"
ExpiresByType text/css "access 7 days"
ExpiresByType application/pdf "access 7 days"
ExpiresByType application/javascript "access 7 days"
ExpiresByType application/x-javascript "access 7 days"
ExpiresByType application/x-shockwave-flash "access 7 days"
ExpiresByType image/x-icon "access 7 days"
ExpiresDefault "access 7 days"
</IfModule>
Дээр кэшлэх хугацааг нь файлын төрөл нэг бүрээр харин хамгийн сүүлд ерөнхий хугацааг заасан байна. Хугацааг "access 1 month", "access 1 year" гэх мэтчилэн хүссэнээрээ өөрчлөх боломжтой.
20. Vary: Accept-Encoding header-ийг өгөх
Веб хуудасны ачаалагдах хурдыг тестлэгч сайтууд header дотор Accept-Encoding заахыг шаарддаг. Үүнийг дараах маягаар гүйцэтгэж болно.
<IfModule mod_headers.c>
<FilesMatch ".(js|css|xml|svg|gz|html)$">
Header append Vary: Accept-Encoding
</FilesMatch>
</IfModule>