.htaccess - използване на mod_rewrite модул на apache уеб сървър

Помощен център

.htaccess - използване на mod_rewrite модул на apache уеб сървър

     Apache моулът mod_rewrite е базиран на регулярни изрази и позволява "презаписване" или иначе казано пренасочване на URL заявки към определена поддиректория, като това пренасочване се извършва на сървърно ниво.

     Какво се има впредвид, например искаме когато напишем адрес: example.com, всъщност да отворим ресурс който е поместен в поддиректория на този URL, а именно example.com/folder1/resource.html. Този ефект може да бъде постигнат с mod_rewrite.

    Mod_rewrite модулът и неговата "функционалност" се дефинира в .htaccess файл в основната директория на потребителя. Този файл по подразбиране не се вижда във файл мениджъра на cPanel и ако искаме да го модифицираме (ако вече съществува такъв) или да направим нов, ще трябва да го създадем на локалната си машина и след това да го качим посредством ftp клиент.

    Първо ще покажем пример след което ще обясним кое какво ознчава в примера.

   Пример:

   В първият пример ще покажем как да пренасочим URL http://www.example.com/folder1/ към http://www.example.com/folder2/.

           Options +FollowSymLinks            RewriteEngine On            RewriteRule ^folder1.*$ http://www.example.com/folder2/ [R=301,L]

   Ако желаем като напишем URL http://www.example.com/folder1/ да отваря home директорията на нашия сайт а именно http://www.example.com, то нашият .htaccess файл трябва да изглежда по следния начин:

  Options +FollowSymLinks
  RewriteEngine On
  RewriteRule ^folder1.*$ http://www.example.com/ [R=301,L]  

Следващият пример ще пренасочи URL адресът http://www.example.com/folder1/file.htm да се отваря от http://www.example.com/folder2/file.html.
Като е важно да отбележа, че за да работи успешно съдържанието на двете папки трябва да бъде идентично.

 Options +FollowSymLinks
 RewriteEngine On
 RewriteRule ^folder1/(.*)$ http://example.com/folder2/$1 [R=301,L]  

Обяснение на директивите използвани в горните примери.

Options +FollowSymLinks - това е директива на apache web сървърът, която е необходима за да използваме mod_rewrite модулът. -

RewriteEngine - директива която разрешава използването на mod_rewrite. -  RewriteRule - чрез тази директива дефинираме самото правило.

  • Първата част от израза след RewriteRule дефинира как оригиналния URL адрес изглежда. Както бе споменато по-горе тази дефиниция се базира на регулярни изрази. Кратко раководство за тях е поместено в края на тази статия.
  • Втората част след RewriteRule дефинира новият URL път до ресурса. Този линк е с отношение към основната папка на хостингът (document root), също така могат да бъдат включвани и поддиректории, намиращи се в нея.
  • $1 използван в края на последния пример подсигурява подстраниците да бъдат извиквани от новата локация която сме избрали. Това е направено само в последния пример т.к. само тук имаме идентично съдържание, ако нямаме идентично съдържание както в първите два примера не се добавя.

  • [R=301,L] - този ред осъществява пренасочване (301) и също така спира всяко следващо презаписване да указва влияние на пренасочването.

     В следващия пример ще ви покажем как може да пренасочите URL адрес http://www.example.com/file.html към адрес http://www.example.com/folder1/file.html. За да работи успешно трябва папка folder1 да съществува и да има съдържание в нея. 

  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{HTTP_HOST} example.com$ [NC]
  RewriteCond %{HTTP_HOST} !folder1
  RewriteRule ^(.*)$ http://example.com/folder1/$1 [R=301,L]  

     В този пример има няколко нови директиви:

RewriteCond %{HTTP_HOST} - указва кои адреси ще се пренасочват и кои не. В нашият случай искаме да пренаспчим example.com.
"!" означава кое не искаме да се пренасочи.

  • [NC] - тази директива указва да се съпоставят двата варианта на адреса (с малки или с главни букви).

    Пренасочване на адрес http://example.com на адрес http://www.example.com. Този пример също ще работи и ако се опитваме да достъпим определен файл например http://example.com/file.html.

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

Регулярни изрази

Регулярен израз означава търсене на текст по даден шаблон. В тази част от публикацията ще опишем основните символи които се използва при регулярните изрази.

  • ^ - обозначава началото на израза за който ще се търси съвпадение
  • $ - обозначава края на израза за който ще се търси съвпадение

                ^index.html$ - означава, че търсеното съдържание трябва да е точно index.html 

  • . - обозначава всеки непразен символ (напр. а, B, 5)
  • * - обозначава, че предишния символ може да се съдържа нула или повече съвпадения.

                ^archive.*$ - по този начин ще съвпаднем всичко то вида: "archive2012", "archive_daily".

                ^.*$ - обозначава "прихвани всичко", това може да бъде полезно в случай когато незнаем потребителя какво би вавел за URL.

Ако изпитвате някакви затруднения с конфигурирането можете да се свържете с нашата техническа поддръжка на имейл адрес: support@icn.bg или телефон 02 491 8877 и +359 888 738338