Nginx

URL Yeniden Yazma Nasıl Kullanılır

URL Yeniden Yazma Nasıl Kullanılır
URL Yeniden Yazma, istek URL'sini web sunucusunda tanımlandığı gibi başka bir şeye değiştirme işlemidir. Nginx, esas olarak yeniden yazma amacıyla dönüş, yeniden yazma yönergelerini kullanan ngx_http_rewrite_module modülünü kullanır. Bu modülde tanımlanan bu yönergelerin dışında, ngx_http_map_module içinde tanımlanan harita yönergesi de URL'leri kolaylıkla yeniden yazmak için kullanılabilir. Bu kılavuz 2 ana yönergeyi açıklamayı amaçlamaktadır - geri dönüş, yeniden yazma ve bayrakları, nasıl çalıştıkları ve uygulamaları.

Önkoşullar

Bu kılavuz Nginx 1 için optimize edilmiştir.0.1 ve üzeridir ve bu nedenle mevcut Nginx örneğini yukarıda belirtilen veya üzeri sürüme güncellemeniz önemle tavsiye edilir. Ancak, bazı komutlar, sözdizimleri, yukarıda belirtilen sürümden önceki herhangi bir sürüm için hala çalışabilir. Bu kılavuz biraz ileri düzey bir konu olan URL yeniden yazma ile ilgili olduğundan, izleyicinin Nginx kurulum prosedürünün farkında olduğunu varsayar ve bu nedenle burada açıklanmamıştır.

Dönüş

Return, URL yeniden yazma işlemini gerçekleştiren temel yönergedir ve anlaşılması kolaydır. Normal ifadeler kullanmaz, ancak konum bloğunun yolundan yakalanan, ayrıştırılacak değişkenler içerebilir. Genellikle dönüş yönergesi, istek URL'sini farklı bir konuma yeniden yönlendirmek için kullanılır ve bu nedenle genellikle kalıcı yeniden yönlendirme için 301 ve geçici yeniden yönlendirme için 302 gibi HTTP kodlarını kullanır. Aşağıdaki kod parçacıkları, dönüş yönergesinin bazı kullanım durumlarını göstermektedir.

Aşağıdaki kod parçacığı, istek URL'sini Google'a yönlendirir.com. Doğrudan sunucu kod bloğunun altında veya bir konum kodu bloğunun altında kullanılabilir, ancak yeniden yönlendirme döngüsünden kaçınmak için aynı etki alanına yönlendirmediğinizden emin olun

301 https://google döndür.com;

Aşağıdaki kod parçacığı, istek URL'sini Nucuta'ya yönlendirir.com yolu ile birlikte, örneğin yukarıda belirtilen örnek herhangi bir yol, parametre içermez ve bu nedenle adres çubuğuna hangi URL'nin yazıldığına bakılmaksızın, istek Google'ın kök etki alanına yönlendirilir, oysa aşağıdaki örnekte, yol, parametrelerle birlikte alan adı olmadan taşınır. Alternatif olarak, $is_args$args kullanılabilir, ancak daha sonra $request_uri yerine $uri değişkeni kullanılmalıdır, çünkü $request_uri URL'nin parametrelerini de içerir. Gereken aynı etki alanının farklı bir dizinine yönlendirmekse, dönüş yönergesinde etki alanı adı yerine $host değişkenini kullanın, örneğin aşağıdaki örnekte nucuta yerine.com, $host kullan.

301 https://nucuta döndür.com$request_uri;

Aşağıdaki kod parçacığı, gelen isteği aynı etki alanının yol dizinine ve şemaya yönlendirir, yani aşağıdaki kod parçacığı http://Linux'ta kullanılıyorsa.com'dur ve bir ziyaretçi istekte bulunursa, yol dizinine yönlendirilir ve bu nedenle aşağıdaki kod parçası çok sayıda web sitesini yönetirken kullanışlıdır. Burada $scheme, FTP, HTTP, HTTPS gibi URL protokolünü tanımlar ve $host, geçerli sunucunun etki alanını, Google gibi etki alanı uzantısıyla tanımlar.com, Linux.ağ vb. Bu, HTTP'den HTTP'lere herhangi bir protokol yeniden yönlendirmesi yapmadığından, ikinci örnekte olduğu gibi manuel olarak yapılmalıdır.

301 $şema://$host/path döndür;
if ($düzeni != "https")
301 https://$host$request_uri döndür;

Return yönergesinin bir başka yararlı kullanım durumu, regex değişkenlerini dahil etme yeteneğidir, ancak bunun için normal ifade konum bloğunda belirtilmelidir ve bir kalıp yakalamalıdır, ardından yakalanan kalıp, dönüş yönergesinde mevcut URL ile birleştirilebilir. yeniden yönlendirme amacıyla, örneğin aşağıdaki örnekte, bir metin dosyasına erişmek için bir istek yapıldığında, konum bloğundaki metin dosyasının adını yakalar, ardından bu adı return yönergesine iletir, ardından return yönergesi onu mevcut ile birleştirir İsteği başka bir dizine yönlendirmek için URL.

konum ~* ^/([^/]+.metin)$
301 /chrome/1$ döndür;

Yeniden yazmak

Rewrite, altta yatan mekanizmayı istemci tarafına göstermeden URL'leri web sunucusunda dahili olarak yeniden yazmak için kullanılan bir yönergedir. Sözdizimine göre normal ifadelerle birlikte kullanılır. Temel sözdizimi aşağıdaki gibi gider. Normal ifade yer tutucusu normal ifadeler kullanmak içindir, değiştirme yer tutucusu eşleşen URL'yi değiştirmek içindir, bayrak ise yürütme akışını değiştirmek içindir. Şu anda, yeniden yazma yönergesinde kullanılan bayraklar break, kalıcı, yönlendirme ve son.

normal ifade değiştirmeyi yeniden yaz [bayrak];

Normal ifadelere, değiştirmelere, desen yakalamaya ve değişkene geçmeden önce, bayrakların Nginx'in dahili motorunun nasıl davranmasını sağladığını bilmek önemlidir. Daha önce açıklandığı gibi yeniden yazma yönergesiyle birlikte kullanılan dört ana bayrak vardır, bunların arasında kalıcıdır, her ikisi de aynı işlevi yerine getirdiği için yeniden yönlendirme bayrakları birlikte eşleştirilebilir, yani yeniden yönlendirme.

Yönlendirme

Yönlendirme bayrağı, tarayıcıya yeniden yönlendirmenin geçici olduğunu bildirmek için kullanılır; bu, arama motoru tarayıcılarının sayfanın geçici olarak taşındığını ve bir süre sonra orijinal konumuna geri getirileceğini anlamalarına yardımcı olur. Sayfa 302 sinyali verdiğinde, arama motorları indekslemesinde herhangi bir değişiklik yapmaz ve bu nedenle ziyaretçiler arama yaparken orijinal sayfayı arama motoru indeksinde görmeye devam eder, yani eski sayfa kaldırılmaz ve ayrıca tüm nitelikli sayfalar kaldırılmaz. , sayfa sıralaması, bağlantı suyu gibi yeni sayfaya geçilmez.

yer /

yeniden yaz ^ http://155.138.XXX.XXX/yol yönlendirmesi;

kalıcı

Kalıcı bayrak, tarayıcıya yeniden yönlendirmenin kalıcı olduğunu bildirmek için kullanılır; bu, aynı zamanda arama motoru tarayıcılarının sayfanın kalıcı olarak taşındığını ve bir süre sonra geçici taşımada olduğu gibi orijinal konumuna GERİ ALINMAyacağını fark etmelerine yardımcı olur. Sayfa 301 sinyalini verdiğinde, arama motorları indekslemesinde bazı değişiklikler yapar ve bu nedenle ziyaretçiler arama motoru indeksinde arama yaparken eski sayfa yerine yeni sayfayı görür, yani eski sayfa yeni sayfa ile değiştirilir, ayrıca tüm page rank, link suyu gibi nitelikler yeni sayfaya aktarılır.

yer /

yeniden yaz ^ http://155.138.XXX.XXX/yol kalıcı;

Normal İfade, Desen Yakalama ve Değişkenler.

Nginx, rewrite yönergesiyle birlikte Düzenli ifadeyi yoğun bir şekilde kullanır ve bu nedenle Düzenli ifadeler hakkında bilgi sahibi olmak bu segmentte işe yarar.  Birden çok düzenli ifade türü vardır, ancak Nginx, PCRE olarak da bilinen Perl Uyumlu Normal İfadeleri kullanır. Normal bir ifade test aracına sahip olmak, yazılı desenin Nginx yapılandırma dosyasında kullanmadan önce gerçekten çalıştığından emin olmak için yararlıdır. Bu kılavuz https://regex101'i önerir.araç olarak com/ ve aşağıdaki tüm örnekler yukarıda belirtilen araçla kapsamlı bir şekilde test edilmiştir.

Düzenli ifadeler

yeniden yaz ^/fr/(.*)$ http://nucuta.com/1 kalıcı;

Tipik bir yeniden yazma yönergesi kalıbı yukarıdaki gibidir, başlangıçta yeniden yazma yönergesini içerir, sonra bir boşlukla düzenli ifadede "kalıp", sonra bir boşlukla "değiştirme", sonra son olarak "bayrak". Yeniden yazma yönergesi sunucu parantezleri içinde herhangi bir yere yerleştirilebilir, ancak dinleme, sunucu_adı, kök ve dizin yönergelerini belirttikten sonra saklanması önerilir. Bir ziyaretçi sunucuya bir istekte bulunduğunda, istekle birlikte bir URL gönderilir, daha sonra URL, yeniden yazma yönergesinde belirtilen normal ifade kalıbıyla eşleşirse, değiştirmeye göre yeniden yazılır, ardından yürütme akışı buna göre manipüle edilir. bayrakta.

Normal ifade kalıbı, normal ifade kalıbını isteğin URL'si ile eşleştirdikten sonra alt dizesi URL'den çıkarılan grubu belirtmek için parantez kullanır, ardından URL'den alınan bu alt dize, değişkene atanır. yeniden yazma yönergesinin “değiştirilmesi”. Birden fazla eşleşen grup varsa, eşleşen her grubun alt dizisi "değiştirme" içindeki değişkenlere sayısal sırayla atanır, yani ilk eşleşen grubun alt dizisi birinci değişkene ($1) atanır, alt dizi ikinci eşleşen grup, ikinci değişkene ($2) atanır, vb.

4 bayraktan 2 bayrak bu kılavuzda zaten açıklanmıştır, kalanlar sonuncudur ve kırılır. Kalan bayrakların nasıl çalıştığını anlamadan önce, Nginx motorunun yeniden yazma yönergeleriyle nasıl davrandığını anlamak önemlidir. Bir istekle birlikte bir URL gönderildiğinde, Nginx motoru bunu bir konum bloğuyla eşleştirmeye çalışır. Eşleşsin ya da eşleşmesin, rewrite, return gibi bir yönergeye rastlarsanız, sırayla yürütülür. Gönderilen URL, bir yeniden yazma yönergesinin kalıbıyla eşleşirse, Nginx motoru, yeniden yazma yönergesinin bir döngü olarak nerede belirtildiğinden bağımsız olarak, yeni yeniden yazılan URL, konum bloklarından biriyle eşleşene kadar tüm yapılandırma dosyasını yürütür.

Aşağıdaki URL, her iki bayrağın da Nginx motorunun yürütme akışını yeniden yazma yönergesiyle nasıl davrandığını açıklamak için bir gösteri olarak kullanılır. Aşağıdaki ekran görüntüsü web sunucusunun dosya yapısını göstermektedir.

http://155.138.XXX.XXX/tarayıcı/örnek.txt (istek olarak gönderilen URL)

Bayrak Kullanılmadığında

Hiçbir bayrak kullanılmadığında, her iki yeniden yazma yönergesi de sırayla yürütülür; bu nedenle aşağıdaki listedeki ilk URL 2'ye dönüşürnd, sonra 2nd URL son URL'ye dönüşür Yani örnek.tarayıcı klasöründeki robots.txt dosyası isteniyor, web sunucusu aslında örneği sunuyor.txt dosyasını kök klasörde. URL yeniden yazma işlemi tarayıcıdan tamamen soyutlandığı için, tarayıcıya isteğin bir HTTP numarası ile yönlendirilip yönlendirilmediğini belirten dönüş yönergesiyle karşılaştırıldığında sunumda herhangi bir fark görmez.

  1. http://155.138.XXX.XXX/tarayıcı/örnek.Txt
  2. http://155.138.XXX.XXX/krom/örnek.Txt
  3. http://155.138.XXX.XXX/örnek.Txt
yer /

yeniden yaz ^/tarayıcı/(.*)$ /krom/$1;
yeniden yaz ^/chrome/(.*)$ /$1;
konum /krom
try_files $uri $uri/ =404;

Konum Bloğunun Dışında Kopma veya Son Bayrak Belirtildiğinde

Konum bloğunun dışında kesme veya son bayrak belirtildiğinde, eşleşen yeniden yazma yönergesinden sonraki yeniden yazma yönergeleri hiç ayrıştırılmaz, örneğin aşağıdaki örnekte istek URL'si 2'ye yeniden yazılırnd kullanılan bayraktan bağımsız olarak aşağıdaki listede bir tane var ve hepsi bu kadar.

  1. http://155.138.XXX.XXX/tarayıcı/örnek.Txt
  2. http://155.138.XXX.XXX/krom/örnek.Txt
yer /

yeniden yaz ^/tarayıcı/(.*)$ /chrome/$1 son;#break
yeniden yaz ^/chrome/(.*)$ /$1 son;#break
konum /krom
try_files $uri $uri/ =404;

Bir Konum Bloğunun İçinde Son Bayrak Kullanıldığında

Bir konum bloğunun içinde son bayrak kullanıldığında, o belirli konum bloğunun içindeki artık yeniden yazma yönergelerini ayrıştırmayı durdurur ve yeniden yazılan URL o konum bloğunun yolu ile eşleştirilirse bir sonraki yeniden yazma konumu bloğuna girer, ardından içinde sonraki yeniden yazma yönergesi.

  1. http://155.138.XXX.XXX/tarayıcı/örnek.Txt
  2. http://155.138.XXX.XXX/krom/örnek.Txt
  3. http://155.138.XXX.XXX/örnek.Txt
yer /
yeniden yaz ^/tarayıcı/(.*)$ /chrome/$1 son;

konum /krom
yeniden yaz ^/chrome/(.*)$ /$1 son;
try_files $uri $uri/ =404;

Bir Konum Bloğunun İçinde Break Bayrağı Kullanıldığında

Öte yandan, bir konum bloğunun içinde olduğunda, nerede bulunduklarına bakılmaksızın, bir yeniden yazma yönergesi istek URL'si ile eşleştiğinde ve içeriği kullanıcıya sunduğunda, artık yeniden yazma yönergelerini ayrıştırmayı durdurun.

yer /
yeniden yaz ^/tarayıcı/(.*)$ /chrome/$1 ara;

konum /krom
yeniden yaz ^/chrome/(.*)$ /$1 ara;
try_files $uri $uri/ =404;

Sonuç

URL yeniden yazma, bir web sunucusu içindeki URL'leri yeniden yazma işlemidir. Nginx, bunu mümkün kılmak için geri dönüş, yeniden yazma, harita yönergeleri gibi birden çok yönerge sağlar. Bu kılavuz, iade ve yeniden yazma yönergelerinin ne olduğunu ve bunların URL'leri kolaylıkla yeniden yazmak için nasıl kullanıldığını gösterir. Örneklerde gösterildiği gibi, geri dönüş yönergesi tarayıcıya sinyal vermek için uygundur ve arama motoru sayfanın nerede olduğunu tarar, oysa yeniden yazma yönergesi, tarayıcının sahne arkasında neler olduğunu bilmeden URL yeniden yazma sürecini özetlemede yararlıdır. Bu, bir CDN, önbelleğe alınmış sunucu veya ağ içindeki farklı bir konumdan içerik sunmada oldukça kullanışlıdır. Tarayıcı yalnızca kendilerine verilen URL'yi gösterdiğinden, kullanıcılar kaynağın nereden geldiğini asla bilemezler.

Linux'ta GameConqueror Cheat Engine Nasıl Kullanılır
Makale, Linux'ta GameConqueror hile motorunu kullanma hakkında bir kılavuzu kapsar. Windows'ta oyun oynayan birçok kullanıcı, oyun deneyimini geliştir...
Linux için En İyi Oyun Konsolu Emülatörleri
Bu makale, Linux için kullanılabilen popüler oyun konsolu öykünme yazılımını listeleyecektir. Öykünme, oyun konsollarının, komut setlerinin ve ilgili ...
Best Linux Distros for Gaming in 2021
The Linux operating system has come a long way from its original, simple, server-based look. This OS has immensely improved in recent years and has no...