Sayfa yüklenmeden önce PHP'de başka bir URL'ye yönlendirme nasıl ayarlanır? Euroleague erkekler ucp php yönlendirmesi

6.1K

Diyelim ki https://example.com/final.php sayfasını, https://example.com/initial.php sayfasına giden kullanıcılara görüntülemek istiyorsunuz. Bu birkaç şeyle yapılabilir PHP yöntemleri, JavaScript ve HTML. Bu yazıda PHP'yi başka bir sayfaya yönlendirmek için kullanabileceğiniz yöntemlerin her birini ele alacağız.

Kullanacağımız birkaç değişken şunlardır:

Bir URL'yi yeniden yönlendirmek için PHP başlık() işlevini kullanma

Eğer başlangıç.php'den final.php'ye bir yönlendirme eklemek istiyorsanız, aşağıdaki kodu başlangıç.php web sayfasına yerleştirebilirsiniz. Tarayıcıya yeni bir konum başlığı gönderir:

Burada yönlendirmeyi oluşturmak için PHP işlev başlığını () kullanıyoruz. Bu kodu herhangi bir HTML veya metnin önüne yerleştirmeniz gerekir. Aksi halde başlığın zaten gönderildiğine dair bir hata alırsınız. Başlık göndermedeki bu hatayı önlemek için çıktı arabelleğe almayı da kullanabilirsiniz. Aşağıdaki örnek bu PHP yeniden yönlendirme tekniğini çalışırken göstermektedir:

Header() işlevini kullanarak bir yönlendirme gerçekleştirmek için ob_start() işlevinin PHP betiğindeki ilk işlev olması gerekir. Bu, başlık hatalarının oluşmasını önleyecektir.

Ek bir önlem olarak, web sayfası kodunun geri kalanının çalıştırılmaması için başlık yönlendirmesinin hemen sonrasına die() veya çıkış() ekleyebilirsiniz. Bazı durumlarda arama robotları veya tarayıcılar Konum başlığındaki göstergeye dikkat etmeyebilir. Site güvenliğine yönelik potansiyel tehditler nelerdir:

Açık olmak gerekirse: die() veya çıkış()'ın yönlendirmelerle hiçbir ilgisi yoktur. Web sayfasındaki kodun geri kalanının yürütülmesini önlemek için kullanılırlar.

PHP'de bir sayfaya yönlendirme yaparken, Konum başlığı değerini belirtirken mutlak URL'lerin kullanılması önerilir. Ancak göreceli URL'ler de işe yarayacaktır. Bu özelliği, kullanıcıları harici sitelere veya web sayfalarına yönlendirmek için de kullanabilirsiniz.

PHP echo() işlevini kullanarak JavaScript yönlendirme kodunun çıktısını alma

Bu saf bir PHP çözümü değil. Ancak aynı zamanda etkilidir. Yönlendirmeyi işleyecek JavaScript kodunun çıktısını almak için PHP echo() işlevini kullanabilirsiniz.

Bu çözümü kullanırsanız çıktı arabelleğe almayı kullanmanıza gerek kalmaz. Bu aynı zamanda başlıkların gönderilmesiyle ilgili hataların oluşmasını da önler.

Aşağıda kullanılan bazı örnekler verilmiştir farklı yöntemler Geçerli sayfadan diğerine yönlendirmek için JavaScript:

Başka bir PHP sitesine yönlendirmenin bu yönteminin tek dezavantajı, JavaScript'in istemci tarafında çalışmasıdır. Ve ziyaretçilerinizin JavaScript'i devre dışı bırakılmış olabilir.

Yönlendirme için HTML meta etiketlerini kullanma

Yönlendirmeyi gerçekleştirmek için temel HTML'yi de kullanabilirsiniz. Profesyonelce görünmeyebilir ama işe yarıyor. Ayrıca tarayıcınızda JavaScript'in devre dışı bırakılması veya daha önce başlık hatası gönderilmiş olması konusunda endişelenmenize gerek yok:

Sayfayı her "n" saniyede bir otomatik olarak yenilemek için önceki örnekteki son satırı da kullanabilirsiniz. Örneğin aşağıdaki kod sayfayı her 8 saniyede bir otomatik olarak yenileyecektir.

Merhaba arkadaşlar. Bugün SEO topluluğunda çok sıradan ama her zaman alakalı bir konuyu tartışmak istiyorum - bu 301 Yönlendirmedir (Kalıcı Yönlendirme 301) - ve formaliteler olmadan, "yönlendirme" kelimesiyle kastedilen tam olarak budur. Teknik olarak bu, sunucunun kendisine yapılan bir isteğe verdiği yanıttır; bu yanıt, isteğin adresinin kalıcı olarak taşındığını gösteren 301 koduna sahiptir. Tüm bu kurnaz entrikaların sonucunda yeni bir nihai adres almamız gerekiyor.

Bu teknik yönlere ihtiyacınız olmadığına inanıyorum ve bu nedenle uygulamalı şeyler hakkında konuşmak istiyorum - yönlendirmeyi ne zaman ve hangi durumlarda kullanmanın daha iyi olduğu, yönlendirme kurallarını nasıl ve hangi komutlarla yapılandırabileceğiniz vb. Ayrıca yönlendirmelerin doğruluğunu kontrol edebileceğiniz araçları ve hizmetleri de dikkate alacağız.

Yazı çok uzun olduğu için size kolaylık sağlamak amacıyla bir içindekiler tablosu hazırlamaya karar verdim:

301 yönlendirmesini ne zaman yapmalısınız?

Her şeyden önce, bir sayfanın (bir sayfa grubu veya bir bölümün tamamı) adresi değiştiğinde yönlendirme kullanılır - bu çoğunlukla sitenin yapısı değiştirildiğinde, URL'nin ana kısmı yeniden adlandırıldığında veya URL'nin ana kısmı yeniden adlandırıldığında gerçekleşir. adres oluşturma prensibi (yani CNC) değiştirildi. Ne yazık ki, sitede bir şeyi değiştirirken herkes bunu düşünmüyor ve sonuç olarak çok sayıda kopya ortaya çıkıyor, bu da konum kaybına ve hatta arama motorları tarafından yaptırım uygulanmasına yol açıyor. İşimde bu tür durumlarla çok sık karşılaşıyorum ve her şeyi düzeltmek ve sonuçları etkisiz hale getirmek çok fazla sinir gerektiriyor. Kendi adıma, CNC tipini veya yapısını değiştirmeye yönelik herhangi bir çalışmadan önce sitenin mevcut yapısının, tüm bölümlerinin ve son sayfa örneklerinin bir planını yapmanızı önerebilirim. Tüm bunların iş tamamlandıktan sonra kontrol edilmesi gerekecek, böylece eski adrese gittiğimizde yenisine ulaşacağız ve sunucu 301 koduyla (302 değil) bir yönlendirme verecek.

301 yönlendirmelerinin bir sonraki yaygın kullanımı site adresini değiştirmek veya aynaları birbirine yapıştırmaktır. Şirketin marka değişikliği ile bağlantılı olarak web sitesi adresini değiştirmeye karar verirseniz veya basılı promosyon ürünlerinde belirtmek üzere yeni, daha güzel ve daha kısa bir alan adı tescil ettirirseniz, eski alan adındaki adrese erişirken kullanıcının eski alan adındaki adrese erişmesi çok önemlidir. aynı sayfada biter (ve ana sayfa), ancak yeni bir alanda. Promosyon siteleri ise genellikle bir veya iki sayfadan oluşur, ana siteye yönlendiren bağlantılardır veya tanıtım sitesine girdiğinizde hemen ana sitedeki özel bir sayfaya yönlendirilirsiniz. Bazen, bir web sitesi oluştururken, örneğin şirket adının Latince'de belirsiz yazılması nedeniyle birden fazla alan adı aynı anda kaydedilir. Sezgisel olarak bir adres yazarken kullanıcının doğru yere gitmesini ve birden fazla alan adının kaydedilmesini sağlamak için, tüm "yardımcı" alanlardan tek bir ana adrese 301 yönlendirmesinin gerçekleşmesi çok önemlidir. Hiçbir durumda aynı web sitesine tüm adreslerden erişilemez.

Ve ayrıca aynalar hakkında - sitenize http://www.site.ru, http://site.ru ve https://site.ru adreslerinde ulaşılabilir (ikincisi nadirdir, ancak olur) - bunlar yapılmaması gereken tüm klasik hatalardır ve bunların çözümünde 301 yönlendirmeleri yer alır. Tıpkı farklı web sitesi adreslerinde olduğu gibi, ana aynaya (www ile veya www olmadan) karar vermeniz ve ana aynaya yönlendirmeler ayarlamanız gerekir. Elbette arama motorları aptal değildir ve bu tür durumlarla genellikle kendi başlarına başa çıkarlar ve siz de onlara aşağıdakileri yaparak yardımcı olabilirsiniz: doğru ayarlar web yöneticisi panellerinde ve robots.txt dosyasında (Yandex için Host yönergesi). Ancak SEO hassas bir konudur ve ben şansa güvenmiyorum, kanıtlanmış bir yöntem kullanıyorum!

Bazen sitenin bir kopyası yalnızca adres çubuğuna alan adını girdiğinizde değil, aynı zamanda sunucunun IP adresini de girdiğinizde çok hoş olmayan bir durum ortaya çıkar. Bu durumun paylaşımlı barındırmada gerçekleşmesi pek mümkün değildir, ancak özel bir sunucunuz varsa kolayca gerçekleşebilir. Yanlış sunucu yapılandırmasının nedeni bu olabilir - bir IP adresine erişirken erişimi devre dışı bırakmak sorunun çözülmesine yardımcı olacaktır, ancak buradaki en iyi çözüm web sunucusu düzeyinde (Apache veya Nginx) 301 yönlendirmesidir. Birkaç ay önce tam da böyle bir durumla karşılaştım - bazı sitelerin asılı olduğu özel bir sunucum vardı, ancak sitelerden biri için ayrı bir sunucu daha almaya karar verdim. Siteyi aktardım, her şey saat gibi çalıştı ve bir gün Google sonuçlarında sitemin bir kopyasına rastladım - şok, panik - bunun yeni sunucumun ve tabii ki sitemin IP adresi olduğu ortaya çıktı üzerinde yaşıyor ve iletişim kurulduğunda sunucu 200 OK yanıtını veriyor ve Google onu tamamen dizine ekledi. Önceki sunucuda böyle bir sorun yoktu; başlangıçta bu IP için ana etki alanı olarak belirtilen etki alanına IP'den bir 301 yönlendirmesi yapılandırılmıştı. Artık acı deneyimlerden ders çıkardım ve bu tür şeyleri her zaman kontrol ediyorum - farkında olun ve hataları tekrarlamayın. Sorun, nginx web sunucusu yapılandırmalarına ana etki alanına bir yönlendirme eklenerek çözüldü; aşağıdaki yazının pratik kısmında kodun bir örneğini göstereceğim.

Durum öncekine benzer - sitenin bir kopyası, örneğin site.hosting.ru gibi bir hizmet testi alanı aracılığıyla bulunduğunda ve erişilebilir olduğunda. Bu tür durumlar benim uygulamamda da meydana geliyor ve önceki durumun aksine, bu sanal barındırma için tipiktir. Bu neden var? Örneğin, henüz bir alan adı satın almadınız veya bir siteyi bir barındırmadan diğerine aktarıyorsunuz ancak alan adına ait NS sunucuları değişmedi veya henüz güncellenmedi. DNS kayıtları sağlayıcıda. Böyle durumlarda yaparlar test adresleri, site adresini yeni barındırmaya yönlendirmeden önce her şeyi yapılandırıp yükleyebileceğiniz yer. Ve bazı barındırıcılar bu tür teknik adreslere erişimi engellemeyerek ve hatta indekslemelerini yasaklamayarak günah işliyorlar. Bu hoş olmayan durumla karşı karşıyaysanız, .htaccess dosyasındaki teknik adresten ana adrese 301 yönlendirmesi kaydetmeyi denemelisiniz.

Ve elbette 301 yönlendirmeleri, çeşitli yinelenen sayfalarla mücadele etmek için doğru SEO'ları kullanmayı gerçekten seviyor. Neden sadece doğru SEO'lar? Evet, çünkü müşterinin web sitesine yanlış kişiler girdi ve büyük olasılıkla siteyi ziyaret etmeden bağlantı satın almaya başladı - ne yazık ki bu alışılmadık bir durum değil. Siteyi optimize etmek ve tanıtmaktan sorumlu yüklenicilerinin/çalışanlarının dürüstlüğünü, işin ne kadar iyi gittiğini kontrol etmek isteyen müşteriler bana periyodik olarak ulaşıyor - ve şu ana kadar hiçbir hata veya eksiklik bulmadım. sitelerde. Bu yüzden şunu unutmayın: Size yardımcı olmaktan her zaman mutluluk duyarım. Yinelenenlere dönelim - kopyaların dizine eklenmesini engellemek yerine ana adrese yönlendirmenin gerekli olduğuna inanıyorum ve bu o kadar da ilginç değil. Elbette, çekimlerin zorlandığı ve kanonizasyon olmadan yapamayacağınız pek çok durum vardır, ancak yönlendirme yapma fırsatınız varsa, bunu yaptığınızdan emin olun. Her zaman kontrol edilmesi gereken sık karşılaşılan kopya durumları: sonunda eğik çizgi olan ve olmayan adresler, parametreli ve etiketli adresler - Bunu nasıl çözeceğinizi aşağıda anlatacağım.

301 yönlendirmesini ne zaman yapabilirsiniz?

Bu bölüme pek bir şey yazamazsınız ama deneyeceğim. Gerçekten okuduktan sonra yorumlarda bana birkaç fikir ekleyeceğinizi umuyorum.

Yönlendirme 301, 404 hatası yerine sunucu yanıtı olarak kullanılabilir Bulunamadı– yani yanlış bir bağlantıyı veya var olmayan bir sayfayı takip eden kullanıcı, “Üzgünüz, bu sayfa artık mevcut değil” mesajını görmeyecek, mevcut başka bir sayfaya aktarılacaktır. Bu, uzmanlar arasında çok tartışmalı bir nokta ve bu nedenle fikrimi kimseye empoze etmiyorum. Ama ben 404 hatası yerine yönlendirme kullanmayı tercih ediyorum ve olayların gelişimi için çeşitli seçenekler var... Bakın, 404 hatalarının 2 kategorisi var: birincisi klasik, sayfa gerçekten silindiğinde, ikincisi, çarpık dış bağlantılar nedeniyle hatanın ortaya çıkmasıdır. İlk durumda muhtemelen yönlendirme yapmamalı, 404 hatasını olduğu gibi bırakmalısınız. Ancak ikinci durumda, bozuk bir bağlantıdan geri yüklenebiliyorsa doğru URL adresine yönlendirmeye veya ana sayfaya (veya kategoriye) yönlendirmeye dikkat etmelisiniz.

301 yönlendirmesi ne zaman yapılmamalı

Yönlendirmenin size ne zaman zarar verebileceği ve bu nedenle aşağıdaki durumlarda kullanılmaması gerektiği hakkında birkaç kelime.

En önemlisi hata yapmaktan kaçınmaktır, ne yaptığınızdan %100 emin değilseniz veya bir şeyden şüphe ediyorsanız yönlendirmelere bulaşmamalısınız. Bunu dostça bir tavsiye olarak kabul et :)

Geçici çözümler için kalıcı bir yönlendirme kullanılmamalıdır, adından da anlaşılacağı gibi, geçici yer değiştirme için 302 Moved Temporarily kullanın. Bu durumda sayfalar birbirine yapışmaz ve yönlendirmenin olduğu sayfa istenildiği zaman geri yüklenebilir.

Alan adınızda filtreler, yasaklar vb. sorunlar varsa ve site adresini (alan adını) değiştirmeye karar verirseniz, eski alan adından yeni alan adına 301 yönlendirmesi yapmamalısınız. , eskinin tüm sorunlarını "yapıştıracaksınız". Yani sonuçta hiçbir şey değişmeyecek. Evet, bir süredir eski alan adından yeni alan adına tam 301 yönlendirmesi kullanarak Google Penguen filtresinden çıkmanın bir çözümü vardı. Nitekim tüm pozisyonlar yaptırımlardan önceki seviyeye geri getirildi ve bu kötü Penguen için her derde deva gibi görünüyordu, ancak algoritmanın bir sonraki güncellemesiyle bu özellik dikkate alındı ​​​​ve yeni alan da filtrenin altına düştü, sonuç olarak alan adı değişikliğinden sonra hiçbir gelişme olmadı. Zaten alan adını değiştirmeye karar verdiyseniz, tüm içeriği yeni alan adına aktarmayı deneyebilir, eski alan adını silebilir ve taşımayla ilgili bir mesaj içeren bir taslak koyabilir veya daha da iyisi baştan başlayabilirsiniz. sıfırdan.

301 yönlendirmesi yapmanın birçok yolu vardır: htaccess, php, javascript, sunucu ayarları vb. aracılığıyla - bu nedenle tüm yöntemleri bir kerede kullanmaya çalışmamalısınız; Farklı yollar ve örneğin sonsuz bir döngüsel yeniden yönlendirme elde edebilirsiniz.

Karmaşık bir site yapısıyla çalışırken veya büyük bir portalı yeniden tasarlarken sıklıkla birden fazla yönlendirme veya uzun zincirler meydana gelir. Bu, yönlendirmenin tek adımda değil, iki veya daha fazla adımda gerçekleştiği anlamına gelir; bu kötü bir durumdur ve mümkünse bundan kaçınılmalıdır. Bu bağlantıya tıkladığınızda arama robotu Art arda birkaç yönlendirme almış olan, aldatıldığını düşünebilir ve daha fazla takip etmeyi bırakabilir ve bağlantıları dikkate almayı tamamen bırakabilir. İşte benim pratiğimden bir örnek: Bir keresinde denetim için böylesine beklenmedik bir zincire sahip bir siteyle karşılaştım:

http://site.ru/tax/term/30 ->
http://www.site.ru/tax/term/30 ->
http://www.site.ru/tax/term/30/ ->
http://www.site.hosting.ru/404.php ->
http://www.site.ru/404.php

Ve sonunda 404 hatası vermesi gereken http://www.site.ru/404.php sayfası 200 OK yanıtı veriyor. Bu beni bile şaşırttı ama bir arama robotu böyle bir atlıkarıncanın içine girerse ne düşüneceğini bir düşünün! Zincire üç farklı alan adı katılmakla kalmadı, hata sayfasında da bunun bir hata olmadığı ve indekslenmesi gerektiği belirtiliyor.

Mümkünse, site içinde yönlendirmelerin bulunmaması için çaba gösterin; siteye verilen dış bağlantılar düzeltilemiyorsa ve yönlendirme kaçınılmazsa, iç bağlantılar düzeltilmelidir. Bu, indekslemenin ve sıralamanın kalitesini etkilemeyebilir ancak emin olamazsınız ve bu nedenle bu tür tartışmalı durumlardan kaçınmak daha iyidir. Harika bir tanesi, dahili yönlendirmeleri ve genel olarak site içindeki hataları izlemenize yardımcı olacaktır.

.htaccess'te yönlendirme kuralları oluştururken, sunucudaki dizinlerin ve dosyaların gerçek adreslerini hariç tutun ve seçimi izleyin. Bir zamanlar denetlediğim bir sitenin durumu şuydu: Sonunda eğik çizgi olan ve olmayan yinelenen kategori sayfalarıyla mücadelede web yöneticisi bunu biraz abarttı ve tam tersine sorunu daha da kötüleştirdi. Yeniden yazma kuralları, yalnızca gerçek js komut dosyalarını ve css tarzı dosyaları etkileyerek bunların düzgün çalışmasının durmasına neden olmakla kalmadı, aynı zamanda bazı sayfaların sonuna gereksiz bir eğik çizgi konuldu ve kopyalar ortaya çıktı. Arkadaşlar, oluşturduğunuz kuralların yalnızca çalıştığınız adres grubu için geçerli olduğundan ve diğerlerini sınırlandırdığından emin olun.

Kurtulmanız gereken sorunlu sayfaları ve adreslerini aramak için Yandex ve Google'ın web yöneticisi panellerinin özelliklerini kullanın. Yandex Web Yöneticisi için: Bir site seçin -> Site indeksleme -> Hariç tutulan sayfalar. Google Web Yöneticisi için: Siteyi seçin –> Optimizasyon –> HTML Optimizasyonu; Ve ayrıca: Siteyi seçin -> Yapılandırma -> URL parametreleri.

Yandex ve Google'da yönlendirmelerin indekslenmesi ve yeniden indekslenmesinin özellikleri. Kopyalarla ve sorunlu adreslerle uğraştığınızda elbette webmaster panellerinden hataların kaldırılmasını bekleyeceksiniz, burada bazı özellikler var. Google'da her şey basit - yönlendirmeleri ayarlarsınız, değişiklikler 2 hafta içinde dizine eklenir, aynı zamanda hatalar web yöneticisinin panelinden kaybolmaya başlar, genellikle bir ay sonra tüm hatalar kaybolur. Yandex'de bir incelik var ve bu şu: Yönlendirmeleri ayarladıktan sonra, hataların panelden kaybolmasını sonsuza kadar bekleyebilirsiniz.Bir keresinde desteğe yazana kadar altı ay bekledim, burada bana ek olarak şunu bildirdiler Yönlendirme için robots.txt dosyasındaki sorunlu sayfaların ek olarak kapatılması gerekir ve ancak o zaman bunlar web yöneticisinin panelinden kaybolur.

.htaccess aracılığıyla Kalıcı Yönlendirme 301

Yönlendirmeleri yüklemenin bu yöntemi en popüler ve en basit olanıdır. Her ne kadar itiraf etmeliyim ki her şey göründüğü kadar basit değil, bu yüzden htaccess hakkında ayrı bir yazı yazmayı planlıyorum. Artı tarafta Bu method Yönlendirmenin sunucu düzeyinde ve herhangi bir site komut dosyasının işlenmesi başlamadan önce tetiklendiği ve herhangi bir ek yük taşımadığı belirtilebilir.

Muhtemelen sunucunuzda zaten bir .htaccess dosyası vardır (ana index.php'nin bulunduğu kökte). Bu dosya görünmüyorsa:

  • FTP yöneticisinin ayarlarını kontrol edin, htaccess dosyası olan sistemleri ve dosyaları gizleyebilir
  • Git dosya yöneticisi Barındırıcının kontrol panelinden dosya izinlerini kontrol edin. CHMOD'u kastetmiyorum ama mesela bir grup ve bir kullanıcı olabilir kök kullanıcı, ve alan sahibinin kullanıcı erişimini kullanarak ftp yoluyla bağlanırsınız.
  • Dosya mevcut olmayabilir :) O zaman oluşturulması gerekir, ancak Windows altında bazen bir sorun ortaya çıkabilir çünkü aslında .htaccess dosyası sistem tarafından isimsiz ve sadece uzantılı bir dosya olarak görülmektedir. Basit bir yol öneriyorum - normal bir txt dosyası oluşturun, ona "RewriteEngine On" satırını (tırnak işaretleri olmadan) ekleyin, txt dosyasını sunucuya yükleyin, dosyayı sunucuda .htaccess olarak yeniden adlandırın

Yönlendirmeyle ilgili düzenlemelerin çoğu, bu kuralların ilk önce işlenmesi için dosyanın en başına "RewriteEngine On" satırından sonra yazılmalıdır. Eylem sırasını takip etmek önemlidir, çünkü komutlar sunucu tarafından en başından ilk oluşumuna kadar satır satır işlenir. Başka bir deyişle, her zaman belirli bir örnekle başlamalı ve daha genel bir örnekle bitirmelisiniz.

En yaygın ve yararlı örneklerden bazılarına bakalım:

Www.site.ru'dan site.ru'ya bir alan adı için 301 yönlendirmesi

RewriteCond %(HTTP_HOST) !^www\.(.*) RewriteRule ^(.*)$ http://www.%1/$1

Yukarıdaki yönlendirme seçenekleri harika çalışıyor ve sizin tarafınızdan herhangi bir değişiklik yapılmasını gerektirmiyor; dosyayı .htaccess dosyasına eklemeniz yeterli. Ancak %100 güvenli olması için size başka bir seçenek öneriyorum:

RewriteCond %(HTTP_HOST) !^www.site.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

RewriteCond %(HTTP_HOST) !^www.site.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

RewriteCond %(HTTP_HOST) !^site.ru$ RewriteRule ^(.*)$ http://site.ru/$1

RewriteCond %(HTTP_HOST) !^site.ru$ RewriteRule ^(.*)$ http://site.ru/$1

Birincisi www olan ana alan adına sahip olanlar için, ikincisi ise www olmayanlar içindir. Buna göre her iki örnekte de “site” yerine alan adınızın adını girmeniz gerekmektedir.
Peki bu seçenekler neden daha iyi? Çok basit bir şekilde, alan adında www'nin yokluğunu/varlığını kontrol etmekle kalmıyor, aynı zamanda alan adının tam uyumluluğunu da kontrol ediyorlar.
Canlı örnek: Elbette, bir sitenin beklenmedik bir şekilde barındırma üzerindeki bir hizmet adresi (gerçek etki alanınızı bağlamadan önce siteye erişilebilmesi için böyle bir adres verilir), bazı aynalar ve hatta bir IP tarafından dizine eklenebileceği gerçeğiyle karşılaşmışsınızdır. adres! Dolayısıyla evrensel kurallar yalnızca www'nin yokluğunu/varlığını doğrulayacaktır ve kullanıcının veya arama robotunun hangi alana eriştiği önemli değildir.
Yani gelişmiş seçeneğini kullandığınızda, sitenize yalnızca ve yalnızca kişisel olarak belirttiğiniz alan adı kullanılarak ve www dikkate alınarak erişilebileceğinden %146 emin olacaksınız. Ben sadece bu seçeneği kullanıyorum ve size tavsiye ediyorum!

http'den https'ye 301 yönlendirmesi

Sitelerin güvenli bir protokole büyük geçişi ışığında, http'den https'ye nasıl yönlendirileceğinizi bilmeniz gerekir. Bu arada henüz SSL sertifikası seçmediyseniz bu konudaki yazımı okumalısınız.

Aşağıda, sunucunuzun yapılandırmasına bağlı olarak çalışabilecek veya çalışmayabilecek, http'den https protokolüne 301 yönlendirmesi için çeşitli seçenekler sunuyorum, ancak kurallardan biri kesinlikle size uyacaktır:

RewriteCond %(HTTPS) !=on RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) !=on RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(SERVER_PORT) !^443 $ RewriteRule ^(.*)$ https://%(SERVER_NAME)%(REQUEST_URI)

RewriteCond %(SERVER_PORT) !^443$ RewriteRule ^(.*)$ https://%(SERVER_NAME)%(REQUEST_URI)

RewriteCond %(ENV:HTTPS) !on RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

RewriteCond %(ENV:HTTPS) !on RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

RewriteCond %(HTTP:X-HTTPS) !1 RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTP:X-HTTPS) !1 RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) kapalı RewriteCond %(HTTP:X-Forwarded-Proto) !https RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

https'den http protokolüne yönlendirme (dürüst olmak gerekirse buna neden ihtiyaç duyabileceğinizi bilmiyorum):

RewriteCond %(HTTPS) =RewriteRule'da ^(.*)$ http://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) =RewriteRule'da ^(.*)$ http://%(HTTP_HOST)/$1

Son zamanlarda çok yazdım detaylı talimatlar. https'den https'ye geçiş yapmayı planlıyorsanız bunu okumayı kendinize borçlusunuz!

Anlaşılmaz saçmalığa biraz açıklık getireyim:

  • RewriteCond, eşleştiğinde RewriteRule'u yürütecek bir koşulu belirtir. Kullanarak düzenli ifadeler dize desenleri belirtilir.
  • Sunucu Değişkenleri:
    • %(REQUEST_URI) - URL'nin alan adı ve GET parametreleri olmayan kısmı, örneğin şu anda okuduğunuz sayfa için: blog/post/4393,
    • %(HTTP_HOST) - ana bilgisayar veya Alan adıörneğin: web sitesi
    • %(QUERY_STRING) - GET parametreleri kümesini içeren bir dize, yani URL'nin soru işaretinden sonraki kısmı (ve varsa bağlantı ızgarasından önceki kısmı).
    • %(REQUEST_FILENAME) — tam yol V dosya sistemi sunucudan bu request..php'ye karşılık gelen bir dosyaya veya komut dosyasına, ancak sunucu dosya sisteminde bu korkunç satır /var/www/site/data/www/site/index.php'dir.
      Yönlendirme yaparken beklenmedik bir sonuç alırsınız, örneğin, http://site.ru/page-name?post=17434801_4060 adresindeki post=17434801_4060 parametrelerini kaldırmak istediniz, ilgili kuralları belirttiniz ( bunlar aşağıda yazılacaktır), ancak sonunda http://site.ru/usr/local/www/site.ru/www/page-name satırını aldık - parametrelerden kurtulduk, ancak garip adres. Bunun nedeni, bir dizin bağlamındaki dönüşümler için belirli bir temel URL ayarlayan RewriteEngine On'dan sonra dosyanın başında bir RewriteBase / yönergesi belirtmemiş olmanızdır.
  • Meta karakterler, bir modeldeki karakter gruplarını veya "etiketleri" tanımlamak için kullanılır:
    • ^ - satır başlangıç ​​işareti,
    • $ satır sonu işaretidir,
    • ! – inkar,
    • \ - eğik çizgiden kaçma, onu takip eden meta karakteri normal bir karakter olarak değerlendirmenizi sağlar,
    • . – nokta, herhangi bir karakteri belirtir, ancak yalnızca bir tanesini,
    • () – gruplandırma.
  • Değiştiriciler normal karakterlerin, meta karakterlerin veya bunların gruplarının arkasına yerleştirilir ve şablon kullanma olanaklarını genişletir:
    • ? — sembol 0 veya 1 kez tekrarlanır,
    • * — 0'dan 65536'ya kadar tekrarlandı,
    • + — 1'den 65536'ya kadar tekrarlanır.
  • Bayraklar bu kural için ek seçenekleri tanımlar ve şu şekilde listelenir: köşeli parantez virgüllerle ayrılmış:
    • NC - (nocase) vaka kontrolünü devre dışı bırakır.
    • R - (yönlendirme), dönüştürme işlemini durdurur ve sonucu istemci tarayıcısına yönlendirme olarak döndürür. bu sayfa(302, GEÇİCİ TAŞINDI). Bu bayrakla farklı bir sonuç kodu belirtebilirsiniz; örneğin R=301, 301 kodlu bir yönlendirme döndürecektir (KALICI OLARAK TAŞINDI). Anladığınız gibi, tam olarak ihtiyacımız olan şey bu.
    • L - (son) dönüştürme sürecini durdurur ve mevcut bağlantı nihai olarak kabul edilir.

En popüler durum index.php'den (html) ana sayfaya 301 yönlendirmesidir. Sitelerin %90'ında, http://site.ru ve http://site.ru/index.php adreslerinde (veya index.html, index.htm veya başka herhangi bir seçenekte) ana sayfayı kopyalama sorunu vardır. , önemli değil, hatta hepsi bir kerede). Bir yerde bu açıktır, örneğin logodaki bir bağlantı site.ru'ya ve menüdeki bir bağlantı site.ru/index.php'ye yönlendirdiğinde, açık olmayan bir yerde, girerken bir kopya bulunduğunda bu açıktır. index.php'deki adresi manuel olarak girin. Sorunu basitçe çözmek önemlidir. Ve evrensel bir seçenek sunuyorum, işte burada:

RewriteCond %(THE_REQUEST) ^(3 ,9 )\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1

RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1

Bu kodu "RewriteEngine On" satırından sonraki satıra değiştirmeden yapıştırın, sorun yok!

Sitedeki kopyalarla mücadele etmeye başlayanların çoğu, http://site.ru/page-name.html&post=-1234567_8901 ana sayfasını kopyalayan bu tür bağlantıların nereden geldiğini merak ediyor? &Post=-1234567_8901 öneki nereden geldi - bu "iyi" VKontakte'den alınmıştır, birisi sitenizin bağlantısını duvarında, bir grupta veya genel olarak paylaştığında, görünüşe göre bazı istatistikleri izlemek için benzer bir satır otomatik olarak eklenir. .

Bu saçmalıktan bir kez ve tamamen kurtulmak için htaccess'e eklemeniz gerekir:

RewriteCond %(REQUEST_URI) ^(.*)\&sa= RewriteRule ^(.*)\&sa=(.*)$ $1

Gördüğünüz gibi bu durum ile önceki durum arasında hiçbir fark yok, url'de &post= veya &sa= ya da herhangi bir şey olsa bile çözüm aynı, sadece kodun görünen kısımlarını değiştirmeniz gerekiyor. açık, değil mi?

Adresteki parametrelerden veya etiketlerden kurtulmak

Soru, yorumlarda ve forumda birçok kez sorulduğu için göz ardı edilemez. Bu tür kopyalarla ne yapmalı: http://site.ru/?abrakadabra veya daha gerçek bir durum http://site.ru?utm_source=twitterfeed&utm_medium=twitter

Bu durum, PHP betiği için parametrelerden kurtulacağımız bir sonraki noktadan biraz farklıdır, çünkü burada normal adres ve parametreleri betiğe aktarmayız. İşte çözüm:

RewriteCond %(QUERY_STRING) ^lang=ru$ RewriteRule ^(.*)\.php\?(.*)$ $1\.php

%(QUERY_STRING), PHP için bir dizi değişkeni içeren bir dizedir; URL'nin soru işaretinden sonraki kısmıdır (ve varsa çapa karmasından önceki kısmı).

URL'yi ara - http://site.ru/index.php?lang=ru

RewriteCond %(QUERY_STRING) ^lang=ru $
İstenen URL bu kuralın kapsamına girer, başka kural yoktur, dolayısıyla RewriteRule aşağıdaki satırda yürütülecektir.
Yeniden Yazma Kuralı ^(.*) \.php\?(.*) $ $1 \.php

Kaynak URL'si: http://site.ru/index .php?lang=ru
URL ayrıştırma şablonu: ^(.*) \.php\?(.*) $
URL değişkenlere ayrıştırılacaktır: $1 = http://site.ru/index, $2 = lang=ru ve http://site.ru/index .php ($1 \.php) biçiminde yeniden birleştirilecektir.
Daha sonra yeni URL'ye 301 yönlendirmesi yapılacaktır.

Site yapısını değiştirirken kural örneği

RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1

RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1

Blogumun yapısını değiştirdiğimde htaccess dosyasına eklemem gereken satırlar bunlar.

Daha önce şu adreslere sahiptim: https://site/post/4358 ve https://site/post/category/seo, bu da bir şekilde yapıdaki mantığı bozdu - sonuçta blog sitenin yalnızca bir parçası , ancak bazı nedenlerden dolayı gönderiler bloga değil siteye ait ve kategoriler de gönderilere ait ki bu da tamamen mantıksız..info/blog/category/seo - artık blog sitenin ayrı bir bölümü, ve gönderiler ona aittir ve kategoriler gönderilere değil bloga aittir.

Aynı örnekten, kural sırasına uymanın önemli olduğu açıktır. Satırları değiştirirsem, yani https://site/blog/category/seo'da olması gerektiği gibi değil, RewriteRule ^post/(..info/blog/post/category/seo) satırı öne çıkar.

Ve son örnek, sunucu kökündeki adresle ilgili yaygın bir hatanın analizidir.

Örneğin, kategori sayfası http://site.ru/razdel/podrazdel/index.php ve http://site.ru/razdel/podrazdel/ olmak üzere iki adreste mevcut olduğunda sorunu çözmeye karar verdiniz. İkinci URL doğrudur ve ana URL'dir ve sonunda index.php bulunan URL, atılması gereken tam bir kopyadır.

index.php'den bir kategoriye yönlendirme yapmak için aşağıdaki kuralı yazmanız gerekir:

RewriteBase Üzerinde RewriteEngine /

301 sayfadan sayfaya yeni bir adrese yönlendirme

En basit durum, bir sayfayı başka bir adrese yönlendirmeniz gerektiği durumdur. Birkaç sayfa için yönlendirme yapmanız gerekiyorsa, birkaç kural yazmanız gerekecektir, ancak bu durumda yukarıda açıklanan şablonları kullanmak daha iyidir. Tamamen aynı olan birkaç sözdizimi seçeneği vardır:

Yönlendirme 301 /page-name1.html http://site.ru/page-name2.html Yönlendirme kalıcı /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http http://site.ru/page-name2.html

Yönlendirme 301 /page-name1.html http://site.ru/page-name2.html Yönlendirme kalıcı /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http http://site.ru/page-name2.html

Üçünden birini seçin, ancak kişisel olarak ilk seçeneği tercih ediyorum; daha kısa, daha basit ve daha anlaşılır. Bu arada, burada site.ru mutlaka aynı alan adı olmayabilir, ancak başka biri olabilir.

.htaccess ile bitirelim ve PHP'ye geçelim.

PHP kullanarak Kalıcı Yönlendirme 301

PHP yönlendirmesini genellikle .htaccess ile ilgili zorluklar olduğunda veya PHP işlevinin daha mantıklı ve anlaşılır olduğu ortaya çıktığında kullanıyorum.

Php'de 301 yönlendirmesinin sözdizimi şuna benzer:

başlık(); başlık("Konum: http://site.ru"); die("Yönlendir");

başlık("HTTP/1.1 301 Kalıcı Olarak Taşındı"); başlık("Konum: http://site.ru"); die("Yönlendir");

Bu satırlar, müşterinin tarayıcısına, istenen bazı sayfalardan kalıcı olarak http://site.ru adresine yönlendirme yapılması gerektiğini söyler. Bu durumda http://site.ru yalnızca mevcut sitenin ana sayfasının adresi değil aynı zamanda başka herhangi bir site de olabilir. Bir şeyler ters giderse ve bir hata oluşursa, tarayıcı penceresinde "Yönlendir" yazısını göreceğiz.

Daha açık hale getirmek için, blog sitem için yazdığım, belirli sorunları çözmeye çalıştığım birkaç fonksiyon örneğini burada bulabilirsiniz.

URL'den belirli bir bölümü kaldırmanıza olanak tanıyan bir işlev

if (strpos($_SERVER["REQUEST_URI" ], "http://site" ) !== false) ( $real_page_url = "http://site" .str_replace ("/http://site" , "" , $_SERVER["REQUEST_URI" ]); başlık ("HTTP/1.1 301 Kalıcı Olarak Taşındı" ); başlık ("Konum: $real_page_url" ); die("Yönlendirme" ); )

if (strpos($_SERVER["REQUEST_URI"], "http://site") !== false) ( $real_page_url = "http://site"..1 301 Kalıcı Olarak Taşındı"); başlık("Konum: $real_page_url"); die("Yönlendir"); )

Web yöneticisi panelinde bir sürü 404 hatanın görünmesi sorunuyla karşılaştığımda, bu sayfaların adresleri https://alaev..e şeklindeydi. Adresin bir yerinde yinelenen bir site adresi belirdi. Ve sonra URI'nin (URL'yi değil, URI'yi not edin) "http://site" girişini içerip içermediğini kontrol eden bir fonksiyon yazdım ve eğer içeriyorsa adresten bu parçayı kesip sonucu yazıyoruz $real_page_url değişkenine yönlendiriyoruz ve ardından değişkenden doğru adrese 301 yönlendirmesi yapıyoruz.

URL'nin sonundaki eğik çizgiyi kaldıran işlev

if (($_SERVER["REQUEST_URI" ], - 1 , 1 ) == "/" ) ( $requested_url = rtrim($requested_url, "/" ); başlık ("HTTP/1.0 301 Kalıcı Olarak Taşındı" ); başlık ( "Konum: $istenen_url" ); die("Yönlendir"); )

if (($_SERVER["REQUEST_URI"], - 1, 1) == "/") ( $requested_url = rtrim($requested_url, "/"); başlık("HTTP/1.0 301 Kalıcı Olarak Taşındı"); başlık( "Konum: $istenen_url"); die("Yönlendir"); )

Burada istenen sayfanın adresinin sonunda eğik çizgi olup olmadığını, varsa eğik çizginin kesilip eğik çizgi olmayan adrese 301 yönlendirmesinin gerçekleştiğini görmeye çalışan en basit fonksiyon yer alıyor.

ASP, Ruby on Rail vb. gibi farklı programlama dillerinde yeniden yönlendirme komutu vermenizi sağlayan çok daha fazla seçenek var, ancak bu dillere aşina değilim, bu yüzden akıllı olup sizi burada kandırmayacağım . Yönlendirmeler, javascript yönlendirmelerinin yanı sıra meta yenileme meta etiketi kullanılarak da mümkündür - ancak bu, dürüst olmayan kapı geliştiricilerinin kaderidir ve arama motorları bu yönlendirmeleri anlamaz; sunucudan 200 OK yanıtı alırlar. Bu nedenle bu seçenekleri değerlendirmiyoruz.

Nginx sunucusu için Kalıcı Yönlendirme 301

Sitemin IP yoluyla erişilebilen bir yansıması hakkında yazdığımı hatırlıyor musunuz? Sonuç olarak sorun, genellikle /etc/nginx/nginx.conf konumunda bulunan sunucu yapılandırma dosyasına yazılan bir yönlendirmeyle çözüldü. Orada şu satırlar yazıyordu:

sunucu ( varsayılan 1.2.34.123:80'i dinle; sunucu_adı _; yeniden yaz ^/(.*)$ http://site.ru/$1 kalıcı; )

sunucu ( varsayılan 1.2.34.123:80'i dinle; sunucu_adı _; yeniden yaz ^/(.*)$ http://site.ru/$1 kalıcı; )

Burada, bir IP adresine 80 numaralı bağlantı noktası üzerinden erişiliyorsa site.ru'ya kalıcı bir yönlendirme yapılması gerektiği yazıyor.

Ancak teknik destek şu sözlerle bunu yapmamı önermedi: “HTTP sunucusunu, kurallarda açıkça belirtilmeyen bir adresten erişildiğinde bağlantıyı basitçe kapatacak şekilde yapılandırmak daha doğru olur. HTTP sunucu yapılandırması, sunucu kaynakları için en güvenilir, basit, emniyetli ve en az talepkar seçenektir. Bir süre sonra artık erişilemeyen sayfalar muhtemelen arama motoru dizininden çıkarılacaktır."

Bir sonraki tavsiye şuydu: “Yönlendirmek yerine bağlantıyı kapatmanız gerektiğinde, satır yerine “rewrite ^/(.*)$ http://site.ru/$1 kalıcı;” ifadesini belirtin. böyle bir satır "dönüş 444;". Ardından şunu çalıştırın: "invoke-rc.d nginx reload"".

Belki bu birine yardımcı olacaktır.

En yaygın durumlardaki yönlendirme örnekleri

Www.site.ru alan adını site.ru'ya yönlendirin

sunucu ( dinle 80; sunucu_adı site.ru; yeniden yaz ^ http://www.site.ru$request_uri? kalıcı; )

http://site.ru/index.php adresinden http://site.ru/ adresine yönlendirin

konum = /index.php ( if ($request_uri = /index.php) ( yeniden yazma ^ http://$host? kalıcı;#301 yönlendirme ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_params'ı dahil edin; )

konum = /index.php ( if ($request_uri = /index.php) ( yeniden yazma ^ http://$host? kalıcı;#301 yönlendirme ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_params'ı dahil edin; )

Bunun gibi bir şey. Nginx için yapılandırma ayarlama konusunda iyi değilim; her zaman Apache ayarlarıyla idare ediyorum, bu nedenle nginx hakkında herhangi bir sorunuz varsa size yardımcı olmam pek mümkün değil...

HTTP üstbilgileri ve sunucu yanıt durumları nasıl kontrol edilir

Bu bölümde, sunucu yanıtını kontrol etmek için çeşitli hizmetleri ve eklentileri açıklamak istedim, ancak bu yazının hacminin zaten o kadar büyük olduğunu ve kendimi yalnızca uzantı bağlantılarıyla sınırlamam gerektiğini anlıyorum. Chrome tarayıcıları ve Firefox.

Firefox için HttpFox eklentisi

HttpFox (burada eklentinin bağlantısını bulabilirsiniz) en sevdiğim http başlık izleme aracıdır. HttpFox, sayfa yükleme işleminin ilerlemesini satır satır gösterir; bu, örneğin yönlendirme zincirlerini ve genel olarak sayfa yükleme sırasını ve hızını izlemenize olanak tanır. Mozilla kullanıyorsanız kesinlikle tavsiye ederim.

Chrome için HTTP Üstbilgileri Uzantısı

Ben HTTP Başlıkları uzantısını kullanmıyorum (burada bir bağlantı var), ancak İnternet bana buna dikkat etmemi tavsiye etti. Daha iyi seçenekleriniz varsa lütfen yorumlara yazın.

Bu kadar uzun ve sıkıcı yazımı burada sonlandırıyorum arkadaşlar.
Sonuna kadar okuduğunuz için teşekkür ederim, umarım gerçekten faydalı bulmuşsunuzdur.

.htaccess yapılandırma dosyası Apache web sunucularına yönelik bir yapılandırmadır. Çoğu barındırma sitesi bu sunucu üzerinden çalışır, dolayısıyla her sitede bu dosya bulunur. Web yöneticileri kendi değişikliklerini yaparak işleyişini kısmen kontrol edebilirler. Bu yazımızda sunucunun işleyişinde değiştirilebilecek direktif ve kurallara bakacağız.

En önemli .htaccess dosyası sitenin kökünde bulunur:

Eylemleri geçerli dizine ve tüm alt dizinlere uygulanır. Onlar. Site sahipleri, tüm sunucunun çalışmasına müdahale etmeden yalnızca projelerinin çalışmasını etkileme fırsatına sahiptir. Bu dosya eksikse herhangi bir not defteri kullanılarak oluşturulabilir. Önemli olan, dosya adının .txt, .doc vb. biçimleri olmadan ".htaccess" olması gerektiğidir.

301 yönlendirmeleri çoğunlukla .htaccess dosyası aracılığıyla sunucu düzeyinde yapılandırılır ve bu, geçiş sürecini büyük ölçüde hızlandırır. yeni sayfa, Çünkü ara sayfa yüklemeye gerek yoktur. Ayrıca 404 hatasını hangi dosyanın işlediğini de belirtir.

Aşağıda .htaccess yoluyla yönlendirmeler için tüm yaygın seçeneklere bakacağız ve önce seçeneklere ve kurallara aşina olacağız.

Yönlendirmelerle çalışabilmek için ReWriteEngine modülünü etkinleştirmeniz gerekir. Bunu yapmak için iki satır kod yazmanız gerekir (tercihen .htaccess dosyasının en üstüne):

Seçenekler +TakipSymLinks Yeniden Yazma Motoru Açık

mod_write modül direktifleriyle çalışabilmek için bu satırları .htaccess dosyanızın en üstüne yerleştirin.

Ayrıca, mod_alias modüllerinin barındırmada etkinleştirilmesi gerekir (Redirect, RedirectPermanent ve RedirectMatch'i desteklemek için).

1. Redirect, RewriteRule ve RewriteCond kuralları 1.1. Yönlendirme yönergesi

Yönlendirme söz dizimi:

http://'den tam_adrese yönlendir / yönlendir

Yönlendirme, bir sayfadan diğerine doğrudan yönlendirmeyi ayarlar.

Yönlendirme kodu status'a yazılır. İsteğe bağlı bir parametredir. Çoğu zaman sayfa adresinde kalıcı bir değişiklik olduğunu gösteren 301 yazarlar.

“Gönderen” sayfasının, tam site adresini belirtmeyecek, ancak eğik çizgi “/” ile başlayan (yani sitenin kökünden) tam ilgili URL'yi gösterecek bir formatta yazılması önemlidir. Yönlendirmenin gideceği sayfanın tam olarak yazılması gerekir; mutlak URL sayfa adresi (yani alan adı ve http veya https protokolüyle birlikte).

Örneğin

Yönlendirme 301 /eskisayfa.php http://site/yenisayfa.php

Farklı da yazabilirsiniz

RedirectPermanent 301 /oldpage.php http://site/newpage.php veya Redirect kalıcı 301 /oldpage.php http://site/newpage.php 1.2. RewriteRule yönergesi

RewriteRule yönergesi geçiş kurallarını belirler. Sözdizimi aşağıdaki gibidir:

Yeniden Yazma Kuralı Deseni Değiştirme [kodlar]
  • Harici bir yönlendirme gerçekleştiğinde, tarayıcı satırındaki URL değişir - " "
  • Dahili - ile tarayıcı satırındaki URL'yi değiştirmez - " " veya "[L] "
1.3. RewriteCond yönergesi

RewriteCond yönergesi, RewriteRule'daki kuralların yürütüleceği koşulları tanımlar.

RewriteCond Comparison_String Koşulu

Örneğin bu terimler kullanıcının tarayıcısı, IP adresi, başlığı vb. olabilir.

1.4. RedirectMatch yönergesi

RedirectMatch direktifi Redirect'e benzer, tek farkı normal ifadeler yazmanıza izin vermesidir.

RedirectMatch Nereden Nereye 2. .htaccess'te 301 yönlendirme örnekleri

Makalelerde .htaccess yönlendirmesi içeren birçok örneğe zaten baktık:

  • Web sitesi adresini değiştirme - eski alan adından yeni alana yönlendirme

Burada henüz mevcut olmayan yönlendirmeler için seçenekler ekleyeceğiz.

2.1. Bir sayfadan diğerine yönlendirme

site.ru/cat/oldpage'den site.ru/newpage.html'ye yönlendirin

RewriteRule ^cat/oldpage.* /newpage.html

Veya ikinci seçenek:

Yönlendirme 301 /cat/oldpage http://www.site.com/newpage.php 2.2. Tüm .htm dosyalarından .html RewriteCond %(REQUEST_FILENAME) !-f RewriteRule ^(.*)\.htm$ $1.html dosyasına yönlendir

Veya ikinci seçenek:

RewriteRule ^(.*)\.htm$ $1.html 2.3. Dizinin tamamını başka bir sayfaya yönlendir

/old/ dizinindeki ve alt dizinlerindeki tüm sayfalar /new.php adresine yönlendirilecektir.

RewriteRule ^eski(.*)$ /yeni.php 2.4. Bir URL'deki fazladan eğik çizgileri kaldırma

Örneğin, /catalog///stranica.html sayfasına erişilebilir ve açılır. Bu durumdan kaçınmak ve sonsuz sayıda kopya oluşturmamak için aşağıdaki yönlendirmeyi yazmalısınız.

RewriteCond %(REQUEST_URI) ^(.*)//(.*)$ RewriteRule . %1/%2 2,5. Yönlendirme olmadan yeniden yaz

Sayfa URL'sini değiştirmeden farklı bir sayfa yükleyebilirsiniz. Örneğin, /news.html sayfasını yükleyelim ve adres çubuğunda /news/mutlu adresi görüntülenecektir.

RewriteRule ^news/happy.* /news.html [L] 2.6. Ana sayfa adresinin sonuna eğik çizgi eklenmesi

Örneğin birçok sunucu URL'de son eğik çizgi yazılmayacak şekilde çalışır. Örneğin, http://site.ru. Aşağıdaki kod bu sorunu çözmektedir: site http://site.ru/ adresinde açılacaktır.

RewriteCond %(REQUEST_URI) /+[^\.]+$ RewriteRule ^(.+[^/])$ %(REQUEST_URI)/ 2.7. Dizin dizinini URL'den kaldırma

Örneğin, site.com/directoriya/stranica.html sayfasından site.com/stranica.html sayfasına yönlendirmek için aşağıdakileri girmeniz gerekir:

Yeniden Yazma Kuralı ^directoriya/(.+)$ http://site.com/$1

Veya ikinci seçenek:

RewriteCond %(DOCUMENT_ROOT)/directoriya/$1 -f RewriteRule ^(.*)$ directoriya/$1 2.8. GET parametrelerini yönlendir

Örneğin, /?act=page&id=2 sayfasından /page-2/ sayfasına yönlendirin

RewriteCond %(QUERY_STRING) act=page RewriteCond %(QUERY_STRING) id=(\d+) RewriteRule .* /page/%1/? ] 2.9. Yönlendir mobil versiyon m.site.ru sitesi

Bu örnekte öncelikle kullanıcının siteyi şununla açıp açmadığını kontrol ediyoruz: mobil cihaz(HTTP_USER_AGENT), site adresi m.URL ile değiştirilir.

RewriteCond %(HTTP_HOST) ^(.*)$ RewriteCond %(HTTP_USER_AGENT) (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib| symbian|kablosuz|nokia|el|mobi|telefon|cdm|upb|ses|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx |panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto |iphone|android) Yeniden Yazma Kuralı ^$ http://m.%1 2.10. Bir alt alan adından yönlendirme

Örneğin, poddomen.site.ru alt etki alanının herhangi bir sayfasından site.ru ana etki alanına yönlendirelim.

RewriteCond %(HTTP_HOST) ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%(REQUEST_URI) 3. htaccess 3.1 ile diğer örnekler. IP adresini ve tarayıcıyı reddet

Sitenin, IP adresi 172.111.222.55 olan IE tarayıcısını kullanan bir kullanıcıya açılmasını yasaklayacağız.

RewriteCond %(HTTP_USER_AGENT) MSIE RewriteCond %(REMOTE_ADDR) ^172\.111\.222\.55$ RewriteRule ^.*$ - [F] 3.2. Belirli bir dosyayı reddet

Disable_file.html dosyasını herkes için devre dışı bırakalım:

3.3'ün tamamını reddet. Tek IP'den erişime izin ver

Yalnızca 172.111.222.55 IP adresinden erişime izin verilecek

172.111.222.55'ten itibaren emir reddet, tümden reddet izin ver 3.4. Farklı IP'lerden erişimi reddet

172.112.222.55, 172.113.222.55, 172.114.*.* gibi çeşitli IP adreslerinden siteye erişimi reddedin

reddetme emri, tüm reddetmelere izin ver 172.112.222.55'ten reddet 172.113.222.55'ten reddet 172.114.*.* 3.5. URL'yi büyük karakterlerden küçük karakterlere yönlendir

URL'deki tüm büyük harfler küçük harflere dönüştürülecektir.

Yeniden Yazma Kuralı - Yeniden Yazma Kuralı ! - RewriteRule ^([^A]*)A(.*)$ $1a$2 RewriteRule ^([^B]*)B(.*)$ $1b$2 RewriteRule ^([^C]*)C(.* )$ $1c$2 RewriteRule ^([^D]*)D(.*)$ $1d$2 RewriteRule ^([^E]*)E(.*)$ $1e$2 RewriteRule ^([^F]*) F(.*)$ $1f$2 RewriteRule ^([^G]*)G(.*)$ $1g$2 RewriteRule ^([^H]*)H(.*)$ $1h$2 RewriteRule ^([^ I]*)I(.*)$ $1i$2 RewriteRule ^([^J]*)J(.*)$ $1j$2 RewriteRule ^([^K]*)K(.*)$ $1k$2 RewriteRule ^([^L]*)L(.*)$ $1l$2 Yeniden Yazma Kuralı ^([^M]*)M(.*)$ $1m$2 Yeniden Yazma Kuralı ^([^N]*)N(.*)$ $1n$2 RewriteRule ^([^O]*)O(.*)$ $1o$2 RewriteRule ^([^P]*)P(.*)$ $1p$2 RewriteRule ^([^Q]*)Q( .*)$ $1q$2 RewriteRule ^([^R]*)R(.*)$ $1r$2 RewriteRule ^([^S]*)S(.*)$ $1s$2 RewriteRule ^([^T] *)T(.*)$ $1t$2 Yeniden Yazma Kuralı ^([^U]*)U(.*)$ $1u$2 Yeniden Yazma Kuralı ^([^V]*)V(.*)$ $1v$2 Yeniden Yazma Kuralı ^( [^W]*)W(.*)$ $1w$2 Yeniden Yazma Kuralı ^([^X]*)X(.*)$ $1x$2 Yeniden Yazma Kuralı ^([^Y]*)Y(.*)$ $1y $2 RewriteRule ^([^Z]*)Z(.*)$ $1z$2 RewriteRule - [N] RewriteCond %(ENV:HASCAPS) TRUE RewriteRule ^/?(.*) /$1

Yeterli önemli nokta siteyi kurarken. Yanlış yapılandırılmış bir yönlendirme, sitenin arama sonuçlarına büyük ölçüde zarar verebilir. Kalıcı Yönlendirme 301'i kullanmanız gereken en yaygın durumlar:

  • Site adresini değiştirme - alan adınızı satın aldınız ve site.example.com'dan site.ru'ya geçmeye karar verdiniz
  • Aynaların yapıştırılması - siteniz www.site.ru ve site.ru adreslerinde mevcutsa, arama motorları Bunu iki farklı site olarak değerlendirebilirsiniz, bu nedenle öncelikle ana aynaya (www ile veya www olmadan) karar vermeniz ve ana aynaya yönlendirmeler ayarlamanız gerekir.
  • Bir sayfa (bir veya daha fazla) adresini değiştirdiğinde, bir noktada http://example.com/index.php?option=com_content&task=view&id=23&Itemid=1 adreslerinin iyi olmadığı anlaşıldı ve bu adreslerin değiştirilmesi gerekiyordu. http://example.com/sport/news12 olarak değiştirilecek, ancak arama motoru dizinindeki konumları kaybetmek üzücü (çünkü bu onlar için yeni bir makale olacak).
  • Yinelenen sayfalarla baş etmenin başka bir yolu

Önemli: Sayfa geçici olarak taşındıysa 302 Geçici Olarak Taşındı'yı kullanın. Bu durumda sayfalar birleştirilmez ve yönlendirmenin yapıldığı sayfa her zaman geri yüklenebilir.

Apache için Kalıcı Yönlendirme 301 (.htaccess)

Kuralları satırların hemen sonrasına eklemeniz gerekir:

RewriteEngine On RewriteBase / #, sunucu kökünden site köküne kadar tam yolu kısaltmak için

kuralların kendisi düzenli ifadeler kullanılarak belirtilir; sözdizimini hatırlayın:

  • Bir kalıptaki karakter gruplarını veya "etiketleri" belirtmek için meta karakterler:
    • ^ - satır başlangıç ​​işareti,
    • $ - satır sonu işareti,
    • ! - inkar,
    • \ - eğik çizgiden kaçma, onu takip eden meta karakteri normal bir karakter olarak değerlendirmenizi sağlar,
    • . - nokta, herhangi bir karakteri belirtir, ancak yalnızca bir tanesini,
    • () - gruplandırma.
  • Değiştiriciler normal karakterlerden, meta karakterlerden veya bunların gruplarından sonra yerleştirilir:
    • ? - sembol 0 veya 1 kez tekrarlanır,
    • * - 0'dan 65536'ya kadar tekrarlandı,
    • + - 1'den 65536'ya kadar tekrarlandı.
  • Bayraklar bu kural için ek seçenekleri tanımlar:
    • NC - (nocase) vaka kontrolünü devre dışı bırakır.
    • R - (yönlendirme), dönüştürme işlemini durdurur ve sonucu, bu sayfaya (302, TAŞINMIŞ GEÇİCİ) yönlendirme olarak istemci tarayıcısına döndürür.
      Bu bayrakla farklı bir sonuç kodu belirtebilirsiniz; örneğin R=301, 301 kodlu bir yönlendirme döndürecektir (KALICI OLARAK TAŞINDI). Anladığınız gibi, tam olarak ihtiyacımız olan şey bu.
    • L - (son) dönüştürme sürecini durdurur ve mevcut bağlantı nihai olarak kabul edilir.

En yaygın durumları göz önünde bulundurun:

RewriteCond %(HTTP_HOST) ^www\.(.*) RewriteRule ^(.*)$ http://%1/$1 RewriteCond, eşleştiğinde RewriteRule kuralını yürütecek koşulu belirtir. index.php'den (html) ana sayfaya yönlendir RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php| html |htm)$ $1 Site yapısını değiştirirken yönlendirme RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1 PHP'de Kalıcı Yönlendirme 301

Tarayıcıya, istediği sayfanın http://site.ru adresine yönlendirilmesi gerektiğini bildirmek için aşağıdaki komutları çalıştırın:

Header("HTTP/1.1 301 Kalıcı Olarak Taşındı"); başlık("Konum: http://site.ru"); çıkış();

Nginx için Kalıcı Yönlendirme 301

Yönlendirme kuralları sunucu bölümünde açıklanmıştır.

Www.site.ru'dan site.ru sunucusuna yönlendir ( dinle 80; sunucu_adı www.site.ru; yeniden yaz ^ http://site.ru$request_uri? kalıcı; )

veya Genel kural tüm siteler için:

Sunucu ( sunucu_adı ~^(?! www\.); yeniden yazın ^ http://www.$host$request_uri kalıcı; )

Site.ru'dan www.site.ru sunucusuna yönlendir ( dinle 80; sunucu_adı site.ru; yeniden yaz ^ http://www.site.ru$request_uri? kalıcı; ) index.php'den ana sayfa konumuna yönlendir = / index.php ( if ($request_uri = /index.php) ( yeniden yazma ^ http://$host? kalıcı;#301 yönlendirme ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root $ fastcgi_script_name; fastcgi_params'ı dahil edin; )

301 Kalıcı Olarak Taşındı durumuna sahip bir HTTP durum kodu, istenen belgenin başlığın Konum alanında belirtilen yeni URI'ye kalıcı olarak taşındığını gösterir.

Bu ne için?

Öncelikle bir sitenin alan adını değiştirirken site adresindeki değişikliği arama motorlarına bildirmek gerekir. İkinci olarak site adını www ile ve www olmadan birleştirmek. Üçüncüsü, Sayfa Sıralamasını hızlı bir şekilde yeni bir siteye aktarmak.

PHP

Birinci yöntem

İkinci yöntem

perl

Birinci yöntem

$cgi = yeni CGI; print $cgi->redirect("http://www.example.com/");

İkinci yöntem

#!/usr/bin/Perl -w katı kullanımı; print "Durum: 301 Kalıcı Olarak Taşındı\n"; print "Konum: http://www.example.com/\n\n"; çıkış;

ASP.NET

Birinci yöntem

özel void Page_Load(object sender, System.EventArgs e) ( Response.Status = "301 Kalıcı Olarak Taşındı"; Response.AddHeader("Location","http://www.example.com"); )

İkinci yöntem (sürüm 4.0'dan)

RedirectPermanent("http://www.example.com");

ASP Ruby on Rails def do_something başlıkları["Durum"] = "301 Kalıcı Olarak Taşındı" yönlendirme_to "http://www.example.com/" end ColdFusion Java (JSP) Apache Web Sunucusu (.htaccess)

Birinci yöntem (mod_alias, Yönlendirme)

Yönlendirme 301 / http://www.example.com

İkinci yöntem (mod_alias, RedirectPermanent)

YönlendirmeKalıcı / http://www.example.com

Üçüncü yöntem (mod_alias, Kalıcı yönlendirme)

Kalıcı yönlendirme / http://www.example.com

Dördüncü yöntem (mod_alias, RedirectMatch)

RedirectMatch 301 ^(.*)$ http://www.example.com/

Beşinci yöntem (mod_rewrite)

Seçenekler +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule ^(.*)$ http://www.example.com/$1




Tepe