Skip to main content

Прыклады правілаў rewrite для nginx



Змест артыкула:

Перанакіраванне на url са слэшам

У некаторых CMS для сайтаў старонкі могуць адчыняцца як са слэшам на канцы, так і без, калі рухавічок сам не выконвае рэдырэкт. Напрыклад, старонка http://example.net/page і http://example.net/page/ з пункту гледжання наведвальніка будзе адной. Але для пошукавікаў гэта - дзве розныя старонкі, і ва ўсім вінаваты слэш. Атрымліваецца, дубляванне кантэнту, што дрэнна.

Для перанакіравання на старонку са слэшам варта дадаць у канфігурацыйны файл nginx для вашага сайта радок:


  rewrite ^ ([^.] * [^ /]) $ $ 1 / permanent; 

Цяпер старонка без слэша будзе перанакіроўвацца 301-м рэдырэкт на старонку са слэшам. На старонкі з пашырэннямі (.html, .php і г.д.) дадзенае правіла не акажа ўплыў. Да таго ж, яно універсальна і, каб рухавік не апрацоўваў рэдырэкты дапамогай php, гэтае правіла варта прапісваць для большасці сайтаў, дзе выкарыстоўваюцца чалавека-зразумелыя адрасы.

Rewrite для WordPress

У дакументацыі WordPress ёсць нядрэнны прыклад правілаў rewrite. Я толькі вылучу самае асноўнае, што патрабуецца для працы ў звязку з php-fpm .

  location / {
   try_files $ uri $ uri / /index.php$args;
  }
  location ~ \ .php $ {
   try_files $ uri = 404;
   fastcgi_pass unix: /run/php-www.sock;
   fastcgi_index index.php;
   include fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
   fastcgi_param PHP_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com";
   fastcgi_param PHP_ADMIN_VALUE "open_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /";
  } 

Rewrite для MODx

Для сайтаў на гэтай CMS ў мяне выкарыстоўваюцца наступныя правілы:


  location / {
 try_files $ uri $ uri / @rewrite;
 }
 location @rewrite {
 rewrite ^ / (. *) $ /index.php?q=$1;
 }
 location ~ \ .php $ {
  try_files $ uri = 404;
  fastcgi_pass unix: /run/php-www.sock;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
  fastcgi_param PHP_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com";
  fastcgi_param PHP_ADMIN_VALUE "open_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /";
 } 

301-й рэдырэкт з index.php, index.html ў любой тэчцы

Яшчэ бывае так, што CMS самастойна не перанакіроўвае з індэксных файлаў на url без іх. Напрыклад, сайт становіцца даступны як па адрасе http://example.com/ так і па http://example.com/index.php. Гэтае правіла выпраўляе памылку.

  if ($ request_uri ~ * index. (php | html)) {
   rewrite ^ (. +) index.php $ scheme: // $ host $ 1 permanent;
 } 

Пры гэтым, не важна, ляжыць індэксны файл ў каранёвай тэчцы або ва укладзенай, рэдырэкт будзе працаваць заўсёды.

Іншыя

У аднаго свайго блога вырашыў змяніць структуру спасылак. Калі раней усе пасты былі даступныя па спасылках, тыпу /postname.html, то зараз яны пераехалі на іншы адрас: / fotojournal / postname /. Першапачаткова ў якасці рашэння падумаў аб выкарыстанні ўбудовы redirection для wordpress, але потым захацелася паспрабаваць рэалізаваць на nginx. І задумка атрымалася. :)



Праўда, правіла атрымалася простым, дзякуючы таму, што ўсе старонкі /%postname%.html былі перанесены ў адну катэгорыю - fotojournal. Гэтае правіла выглядае наступным чынам:

  location ~ * \. (html) $ {
   try_files $ uri $ uri / @fotojournal;
 }

 location @fotojournal {
   rewrite ^ / (. *) \. html $ / fotojournal / $ 1 / permanent;
 }

Разглядаем дэталёва. Калі паступае запыт ад карыстальніка, спачатку любы файл з пашырэннем .html шукаецца ў тэчцы з сайтам. Гэта трэба для рэальна існуючых html-старонак на сайце, якія не павінны быць перанесены ў новую катэгорыю.

Калі запытаная старонка не была знойдзена, запыт перанакіроўваецца ў другой location - @fotojournal. Тут вырабляецца перанакіраванне (рэдырэкт 301) на новы адрас. Напрыклад, старонка /page.html адкрыецца па адрасе / fotojournal / page /.



Як вы ацэніце артыкул?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (10 адзнак, сярэдняе: 2,70 з 5)
Загрузка ...

Дадаць каментар

Ваш e-mail не будзе апублікаваны.