Przejdź do głównej zawartości

Przykłady reguł przepisywania Nginx



Treść artykułu:

Przekieruj do adresu URL z ukośnikiem

Niektóre CMS dla stron mogą otwierać strony z ukośnikiem na końcu, a bez niego, jeśli silnik się nie przekieruje. Na przykład strona http://example.net/page i http://example.net/page/ z punktu widzenia użytkownika będzie jedna. Ale w przypadku wyszukiwarek są to dwie różne strony, a slash jest odpowiedzialny za wszystko. Tak więc powielona treść jest zła.

Aby przekierować na stronę ukośnika, dodaj następujący wiersz do pliku konfiguracyjnego nginx dla swojej witryny:


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

Teraz strona bez ukośnika zostanie przekierowana do 301. przekierowania na stronę z ukośnikiem. W przypadku stron z rozszerzeniami (.html, .php itp.) Ta reguła nie będzie miała wpływu. Ponadto jest uniwersalny i, aby silnik nie przetwarzał przekierowań za pomocą php, ta zasada powinna być zalecana dla większości witryn, w których używane są adresy czytelne dla człowieka.

Przepisz dla WordPressa

Dokumentacja WordPressa ma ładny przykład reguł przepisywania. Podkreślę tylko najbardziej podstawową rzecz, która jest wymagana do pracy w połączeniu z 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;
   to fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $ katalog_dokumentu $ 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 /";
  } 

Przepisz dla MODx

W przypadku witryn w tym systemie CMS używam następujących reguł:


  location / {
 try_files $ uri $ uri / @rewrite;
 }
 location @rewrite {
 przepisać ^ / (. *) $ /index.php?q=$1;
 }
 location ~ \ .php $ {
  try_files $ uri = 404;
  fastcgi_pass unix: /run/php-www.sock;
  fastcgi_index index.php;
  to fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $ katalog_dokumentu $ 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. przekierowanie z index.php, index.html do dowolnego folderu

Zdarza się również, że sam CMS nie przekierowuje z plików indeksu do adresu URL bez nich. Na przykład witryna będzie dostępna zarówno na http://example.com/, jak i http://example.com/index.php. Ta reguła poprawia błąd.

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

W takim przypadku nie ma znaczenia, czy plik indeksu znajduje się w folderze głównym, czy w podfolderze, przekierowanie zawsze będzie działało.

Inne

Jeden z jego blogów postanowił zmienić strukturę linków. Wcześniej wszystkie posty były dostępne za pośrednictwem linków, takich jak / postname.html, teraz zostały przeniesione na inny adres: / fotojournal / postname /. Początkowo, jako rozwiązanie, pomyślałem o użyciu wtyczki redirection dla wordpress, ale potem chciałem spróbować zaimplementować ją na nginx. I pomysł się spełnił. :)



To prawda, że ​​zasada okazała się prosta, ze względu na to, że wszystkie strony /%postname%.html zostały przeniesione do jednej kategorii - fotojournal. Ta reguła wygląda następująco:

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

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

Rozważamy szczegółowo. Gdy żądanie pochodzi od użytkownika, najpierw szukany jest dowolny plik z rozszerzeniem .html w folderze z witryną. Jest to konieczne w przypadku prawdziwych stron HTML strony, które nie powinny być przenoszone do nowej kategorii.

Jeśli żądana strona nie zostanie znaleziona, żądanie zostanie przekierowane do drugiej lokalizacji - @fotojournal. Tutaj przekierowano (przekierowanie 301) na nowy adres. Na przykład strona /page.html otwiera się w / fotojournal / page /.



Jak oceniasz artykuł?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 ( 10 ocen, średnia: 2.70 z 5)
Ładowanie ...

Dodaj komentarz

Twój e-mail nie zostanie opublikowany.