
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-ის დოკუმენტაცია და დირექტივები



დიიდი მადლობა
ეს გავაკეთე გამოვიდა ყველაფერი ანუ ჩვეულებრივ ლინკებს FURL სახე აქვთ index.php ქვეშ ანუ ენის შეცვლა სიმპატიური გავხადე
http://www.test.ge/lang/en/
მაგრამ ეხა მინდა სხვა გვერდზე იგივეს გაკეთება
http://http://www.test.ge/user.php?id=2
და ესეც რომ ეგრე დაამუშაოს როგორ გავაკეტო ? ??? რომ ვამატებ
RewriteRule ^(.*)$ index.php?query=$1 [L,QSA]
RewriteRule ^(.*)$ user.php?query=$1 [L,QSA]
უბრალოდ სხვანაირი სისტემით აწყობ საიტს შენ, ჯობია ეგ user.php დააინკლუდო და მოდულის სახიტ გამოიტანო.
ამით ყველაფერი გაგიადვილდება FURL-ც და ყველაფერიც.
მაგალითად:
www.example.com/index.php?page=user&id=2
ამას ასახავ ძაან მშვენივრად ასე:
www.example.com/user/2
მაგრამ ვერ მივხვდი რას გულისხმობ Include-ში შეგილია უბრალოდ მიმანიშნო და მერე გავერკვევი დავაინკლუდო როგორ?
მაგალითად:
www.example.com/news/15
სინამდვილეში ჩვენ გვექნება ასეთი მოთხოვნა:
www.example.com/index.php?query=news/15
მერე ამ $_GET['query']-ს დავამუშავებთ და ავიღებთ 2 პარამეტრს: პირველი მოდული და მეორე სიახლის id.
შესაბამისად გამოვიტანთ news მოდულიდან სიახლეს ამ id-ით.
ცოტა მიძნელდება აქ ამის ახსნა, პლიუს ამას გადმოცემის უნარითაც ვერ გამოვირჩევი
P.S. არაფერს
თუ დაწერ პატარა სტატიას თუ როგორ უნდა ავაწყო საიტი მოდულებზე მადლობელი დაგრჩები
ან იქნებ google ზე მიმითითო რა და როგორ მოვძებნო ვერ ვპოვე რამე მაგვარზე ტუტორიალი