
Apache mod_rewrite
ძირითადად mod_rewrite-ს იყენებენ FURL-თვის შემდეგნაირად:
- RewriteEngine On
- RewriteRule ^([a-z]{2})/([0-9]+)/?$ index.php?id=$1 [L]
რომელიც მაგალითად აისახება ასე www.example.com/id/1/
რა იქნება თუ დაგვჭირდება დაუშვათ page-ს დამატება?
- RewriteRule ^([a-z]{2})/([0-9]+)/([a-z]{4})/([0-9]+)/?$ index.php?id=$1&page=2
შედეგი: www.example.com/id/1/page/2/
თუ კიდევ რამის დამატება მოგვინდება
- RewriteRule ^....([0-9]+)/([0-9]+)/?([0-9a-zA-Z])$ index.php?id=$1&page=2&foo=$3
შედეგი www.example.com/id/1/page/2/foo/bar/
და ა.შ.
მაგრამ საბოლოოდ ჩვენს საწყალ .htaccess აპაჩის საკონფიგურაციო ფაილს ექნება ასეთი სახე:
- RewriteEngine On
- RewriteRule ^([0-9]+)/([0-9]+)/?([0-9a-zA-Z])$ index.php?id=$1&page=2&foo=$3
- RewriteRule ^([0-9]+)/([0-9]+)/?([0-9a-zA-Z])$ index.php?someid=$1&page=2&foo=$3
- RewriteRule ^([0-9]+)/([0-9]+)/?([0-9a-zA-Z])$ index.php?blabla=$1&page=2&foo=$3
- ......
არაა ხალხო ეს სწორი მიდგომა!
მოდით განვიხილოთ სწორი გზა, რათა გავხადოთ ჩვენი საიტი მეგობრული საძიებო სისტემების მიმართ.
ჩვენი .htaccess საკონფიგურაციო ფაილი უნდა გამოიყურებოდეს შემდეგნაირად:
- # ვამოწმებთ თუ სერვერზე ჩართულია მოდული mod_rewrite
- # წინააღმდეგ შემთხვევაში Internal Server Error-ს გამოტანს თუ მოდული გათიშულია.
- <IfModule mod_rewrite.c>
- RewriteEngine On
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteRule ^(.*)$ index.php?query=$1 [L,QSA]
- </IfModule>
RewriteEngine On - ლოგიკურია, ვრთავთ მოდულს.
RewriteCond - ანუ Rewrite Condition, პირობა, რომლის შესრულების შემთხვევაშიც მოხდება RewriteRule გამოსახვის რეალიზაცია. ანუ ნაგულისხმებია URL, რომელიც თუ დაემთხვა ჩვენს პირობას მოხდეს ამა თუ იმ გამოსახვის რეალიზაცია.
%{REQUEST_FILENAME} არის Environment Variable, ანუ ქართულად არ ვიცი როგორ იქნება სიტყვასიტყვით, უფრო სერვერული ცვლადები, რომელიც მოქმედებს გარემოზე, ანუ ჩვენს შემთხვევაში კლიენტებზე.
!-f ნიშნავს "თუ ფაილი არ არსებობს", ანუ -f არის მოდიფიკატორი "თუ ფაილი არსებობს" ხოლო ძახილის ნიშანი ! საწინააღმდეგო მაჩვენებელი.
ანალოგიურად !-d, ფაილთან განსხვავებით აქ ნაჩვენებია დირექტორია, ანუ თუ დირექტორია არ არსებობს. რაიმე კონფლიქტის თავიდან ასარიდებლად გვჭირდება ეს მაჩვენებლები.
RewriteRule - ეს არის ერთ-ერთი მთავარი დირექტივაა გამოსახვის, მისი სინტაქსი ასეთია RewriteRule Pattern Substitution სადაც pattern არის ახალი გამოსახვის RegEx, ანუ Regular Expression.
[L,QSA] არის არის მაჩვენებლები.
[QSA] = ანუ Query String Append. ამის მეშვეობით არ კარგავთ ადრეს ბარში გადაცემულ query-ს და უბრუნებს index.php?query პარამეტრს. (მაგალითი ქვემოთ არის ასახული)
[L] = Last, ანუ ამის იქით აღარ მოხდება RewriteRule-ს რეალიზაცია და აპაჩი მეტ მოთხოვნას არ გააგზავნის, ჯამში აგზავნის 2 მოთხოვნას:
1. "ახალი მოთხოვნა", ანუ რაც ადრეს ბარში იკრიფება www.example.com/foo/bar/
2. "ორიგინალი", ანუ ნამდვილი მოთხოვნა www.example.com/index.php?query=/foo/bar/
PHP - ში კი შეგვიძლია ეს Query String (ანუ $_GET['query']) დავშალოთ explode(); ფუნქციით და ჩვენს გემოზე მივაკეთ-მოვაკეთოთ მოთხოვნები.
ეს კი mod_rewrite-ის დოკუმენტაცია და დირექტივები



[Last Comments]