.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

Публикувано на

В случай, че имате нужда от техническа помощ или по-детайлна информация свързана с темата от помощната статия, молим да изпратите запитване.

Пусни запитване

Нашият Friendly Geeks техничеки екип с радост ще Ви съдейства денонощно и на:

  • Национален телефон: 0700 300 70 (на цената на един градски разговор)
  • Тел.: +359 2 491 8877