.Htaccess yönlendir: başka bir alana yönlendir ve başka bir sayfaya yönlendir

  1. Yönlendirme .htaccess: kalıcı yönlendirme, 301
  2. Www (veya www olmadan) yönlendirme nasıl kurulur
  3. .Htaccess nasıl oluşturulur
  4. .Htaccess dosyası çalışmıyor
  5. Nginx'te .htaccess analogu var mı?
  6. Yazarlar
  7. x64 (aka andi)

İyi pazarlar!

Apache web sunucusu yapılandırma dosyası - forumlarda sıkça .htaccess hakkındaki soruları bulabilirsiniz. Ana tökezleme bloğu, geliştirmenin son kullanıcı için uygun konfigürasyon görevine sahip olmaması (dağıtım onay kutularını, açılır listeleri, vb. Kullanarak görsel kurulumlar için bir kabuk içermez), ancak sunucu yöneticileri bu görevle "mana" içeriklidir (Linux ekibinden - erkek - geliştiricilere veya bu durumda profesyonellerden profesyonellere hızlı bir rehber).

Çoğu durumda, basit manipülasyonlar gereklidir: koşulsuz başka bir siteye yönlendirme veya bir yerden diğerine yönlendirme (bölümün URL'si değiştiğinde). Ve her kişi, hiçbir yerde kesinlikle bir sorun olmadığına inanmaya başlar ve Internet'te bir çözüm aramak ve forumda arama yapmak bile yararsızdır. Bu problemlerin gerçekte ne olmadığını görelim.

Bu problemlerin gerçekte ne olmadığını görelim

Yönlendirme .htaccess: kalıcı yönlendirme, 301

Bu şeyin farklı isimleri var. Neponyatki belki bu sayıya neden olabilir - neden 301? Buradaki öz, belirli bir durum koduyla müşteri isteklerine yanıt veren HTTP protokolünün kendisinde yatmaktadır. 404 Bulunamadı kodu hemen hemen herkes tarafından biliniyor. 200 OK kodu neredeyse bilinmiyor, ancak bu her şeyin yolunda olduğu ve belgenin tarayıcıda gösterileceği anlamına geliyor. Ancak 301 Kalıcı Hareketli kodu, belgenin sonunda yeni bir adrese taşındığı anlamına gelir. Toplam yanıt havuzu - 3xx: Yönlendirme olarak belirlenmiş olmasına rağmen, bu genellikle yönlendirme olarak adlandırılır.

Apache yönlendirmeler için çeşitli seçeneklere sahiptir. Mod_rewrite modülü yönlendirmelerle çalışmak için mükemmel bir mekanizma sağlar ve gelecekte örneklerde kullanacağım. Mod_alias modülü ayrıca belirli bir adresten veya normal ifadeyle eşleşen bir adresten yönlendirmeler için yönergelere sahiptir:
Kalıcı yönlendir / http://newsite.ru/
RedirectMatch kalıcı. * Http://newsite.ru/
Ancak mod_rewrite yeniden yönlendirme için ek seçeneklere sahiptir, bu yüzden onu kullanmak en iyisidir (IMHO).

Genel olarak, tarayıcının otomatik olarak başka bir sayfaya yönlendirdiği, genellikle kullanıcı için belirsiz bir şekilde (adres çubuğu değiştiğinde), bu kodu .htaccess içine koyabilirsiniz:
RewriteEngine On
RewriteRule. * Http://newsite.ru/ [L, R = kalıcı]
Burada ilk satır, mod_rewrite modülünün mekanizmasını, adreslerle bir şeyler yapmasına izin veren mekanizmasını içerir. Bu URL dönüşümü anında şartlara göre diyelim. İkinci satır doğrudan dönüşüm kuralını tanımlar, yukarıdaki örnekte, tüm istekler http://newsite.ru/ adresine yönlendirilecektir. Bayraklar köşeli parantez içine alınır: L - last (Last) kuralı, R - yönlendirme türü (Yönlendirme), R = code olarak gösterilir, burada kod alfabetik veya sayısal bir atamadır (kalıcı veya 302).

Aslında, mod_rewrite çok kullanışlı bir şey çünkü bu yüzden birçok motor aktif olarak CNC (Human URL anlaşılabilir) olarak adlandırılıyor. Bu terime aşina değilseniz, bir örnekle açıklayacağım. Hakkında makale site için ücretsiz motorlar adresi var: https://a-panov.ru/2014/11/free-cms/

Bu URL’ye bakıldığında, makalenin Kasım 2014’te yayınlandığı hemen açıktır. Başlığı sondaki eğik çizgiyle kaldırarak - https://a-panov.ru/2014/11/ - Kasım ayının tüm yayınlarının bir listesini alacağız. Normal adresler, şunu yazın:

https://a-panov.ru/?p=389

özel bir dostluk yok. Böyle bir adresi görünce, yönlendirdiği sayfa hakkında hiçbir şey söyleyemezsiniz.

Bu yöntem, yeni sitenin hangi sayfasına bağlanacağınız umrunda değilken iyidir. Ancak, başka bir alana geçtiyseniz, adresleri korurken tüm istekleri yönlendirmeniz önerilir. Bunu yapmak için aşağıdaki kodu kullanın:
RewriteRule ^. * $ Http://newsite.ru/$0 [QSA, L, R = kalıcı]
Yeni QSA bayrağı, soru işaretinden sonra adreslerde bulunabilecek parametreleri de kaydedecektir. Zaten tanıdık olan örnekte:

https://a-panov.ru/?p=389

Eğer kodu yukarıdaki .htaccess içine yerleştirirsem, http://newsite.ru/?p=389 adresine, bu bayrak olmadan gerçekleşmeyecek bir adres yönlendirme olacaktır.

Bundan sonra, dönüşüm dahil etme yönergesini atlayacağım:
RewriteEngine On
Sadece şunu hatırlayın: mod_rewrite mekanizmasını kullanıyorsanız, tüm şartlar / dönüşümler bu yönergeden sonra yapılmalıdır. Aşağıdaki satırı devre dışı bırakmak için kullanılır:
RewriteEngine Off
buna göre, her kural için dönüşümleri sürekli “açmak” gerekmemektedir - ilk direktifin hemen ardından otomatik olarak yapılmaya başlar.

Www (veya www olmadan) yönlendirme nasıl kurulur

Bu tür yönlendirmeler, site nsite.ru ve www.nsite.ru adreslerinde mevcut olduğunda, arama motorları bunları yinelenen olarak kabul eder ve seçeneklerden birini seçebilir. ana ayna , veya aramada her iki alandan da seçenekler olacaktır. Genel olarak, bu site sıralamasında olumsuz bir faktördür.

Bir etki alanı için seçenek daha kolay. Yönlendirme, www.site.ru alt alanından site.ru'a gerçekleştirilir:
RewriteCond% {HTTP_HOST} ^ www \ .nsite \ .ru $
RewriteRule. * Http://nsite.ru/$0 [QSA, L, R = kalıcı]
Yeni RewriteCond yönergesinin ortaya çıktığı yer, yönlendirmelerin hangi şartlar altında çalışacağını belirler - RewriteRule kuralları. Bu durumda, koşul, www.nsite.ru'a karşılık gelen etki alanı adı (normal ifadelerde, nokta simgesi “herhangi bir karakter” anlamına gelir, bu nedenle ters eğik çizgi ile korunması önerilir).

Ters yönlendirme de çok basittir:
RewriteCond% {HTTP_HOST} ^ nsite \ .ru $
RewriteRule. * Http://www.nsite.ru/$0 [QSA, L, R = kalıcı]
Her iki seçenek de çalışıyor ancak küçük bir eksi var - her yeni yapılandırma için nsite.ru alan adını kendinizle değiştirmek gerekiyor. Benzersiz bir seçenek yapmak mümkün mü? Kolay!

Herhangi bir www alt etki alanından yönlendir:
RewriteCond% {HTTP_HOST} ^ www \. (. *) $
RewriteRule. * Http: //% 1 / $ 0 [QSA, L, R = kalıcı]

Www ile bir alt etki alanına yönlendir:
RewriteCond% {HTTP_HOST}! ^ Www \.
RewriteRule. * Http: //www.% {HTTP_HOST} / $ 0 [QSA, L, R = kalıcı]

% {HTTP_HOST} - geçerli etki alanı

.Htaccess nasıl oluşturulur

Bu tür sorular da ortaya çıkar. Sorun, standart Explorer'ın (Windows'taki grafik arayüzünden sorumlu olan uygulama), nokta ile başlayan dosyalar oluşturmanıza izin vermemesidir (masaüstünde veya bir pencerede sağ tıklatarak ve Oluşturma listesinden istenen eylemi seçerek dosya veya klasör oluşturarak). Ancak bir çıkış yolu vardır: standart Not Defteri kayıt cihazını açın, menüden Dosya → Farklı kaydet ... seçeneğini seçin ve kaydedilmiş dosyanın adı olarak .htaccess belirtin - bundan sonra oluşturulur.

.Htaccess dosyası çalışmıyor

Bir dosyadaki direktiflerin çalışmadığı durumlar vardır. Buna genellikle .htaccess desteğinin direktifin sorumlu olduğu Apache konfigürasyonunda devre dışı bırakılmış olmasından kaynaklanmaktadır:
AllowOverride yok

Bu genellikle hızı biraz arttırmak için yapılır - bu durumda, web sunucusu .htaccess'i aramaz ve ayrıştırmaz.

Apache'nin sunucuda kullanılmaması da mümkündür, örneğin, IIS, Windows barındırmadaki ana “konuk” dır. Netleştirmek için, barınağınızın desteğine başvurun.

Nginx'te .htaccess analogu var mı?

Başka bir sık ​​sorulan soru. Bu web sunucusunda bu mümkün değildir. Ancak, bu genellikle gerekli değildir. Gerçek şu ki, nginx genellikle bir frondend olarak kuruludur, yani .htaccess kullanılarak yapılandırılabilen Apache tarafından gerçekleştirilebilen ya da kendini gerçekleştiren tüm istekleri kabul eder ve işler.

Yazarlar

çevrimiçi değil 1 gün

x64 (aka andi)

Yorumlar: 2834 Yayınlar: 394 Kayıt: 02-04-2009

Htaccess analogu var mı?
Neponyatki belki bu sayıya neden olabilir - neden 301?
Ru/?
Ru/?
Ru/?
Benzersiz bir seçenek yapmak mümkün mü?
Htaccess analogu var mı?