.htaccess - "www." nasıl zorlanır genel bir şekilde?


102

Bu değişecek domain.comiçin www.domain.com:

# Force the "www."
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

Herhangi bir etki alanında çalışması için "etki alanı" bölümünü nasıl değiştiririm ?

Yanıtlar:


249

Bu kuralı kullanırdım:

RewriteEngine On
RewriteCond %{HTTP_HOST} !=""
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

İlk koşul, Ana Bilgisayar değerinin boş olup olmadığını kontrol eder (HTTP / 1.0 olması durumunda); ikincisi, Ana Bilgisayar değerinin başlayıp başlamadığını kontrol eder www.; HTTPS üçüncü kontrol ( %{HTTPS}ya da bir onya da offçok, %{HTTPS}sya bir onsya da offsve durumunda eşleştirilir). Daha sonra ikame kısmı , bilgi bölümlerini tam bir URL ile birleştirir.onssRewriteRule


31
Bu çözüm yalnızca tüm alt alanların www.alaniniz.com'a yönlendirilmesini istiyorsanız işe yarar. Yalnızca RewriteCond %{HTTP_HOST} ^yourdomain.com [NC]
www'yi

2
Soruda yayınlanan kuralı kullanarak hiçbir alt alanımın www.mydomain.com'a iletilmesini alamıyorum ...
lol

3
çok zeki! HTTPS kontrolünü, aşağıdaki satırda kullandığınız yakalama grubunda bir "S" döndürmeye zorlamanız hoşuma gidiyor. very elegant
code_monk

Evrensel bir cevap gibi görünüyor, HTTP'leri ve normal protokolleri kapsıyor, bir cazibe gibi çalışıyor.
Clain Dsilva

1
Teşekkürler! Bunu RewriteEngine Ontamamlamak için ilk satır olarak eklerdim, çünkü bu, olduğu gibi kopyalanıp yapıştırılırsa 500 Sunucu Hatasına neden olabilir.
Ryan Casas

44

Bunu yapacak:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

5

Sitenize www olmayan tüm istekleri www sürümüne yönlendirmek istiyorsanız, yapmanız gereken tek şey aşağıdaki kodu .htaccess dosyanıza eklemektir:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

3

Bu, alt alan adlarıyla çalışmaz.

domain.com doğru bir şekilde www.domain.com'a yönlendiriliyor

fakat

images.domain.com, www.images.domain.com'a yönlendiriliyor

Alt alan adının "www değil" olup olmadığını kontrol etmek yerine, iki nokta olup olmadığını kontrol edin:

RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ HTTP%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Bu çözümü beğendim. Her neyse, aynı şeyi .co.uk gibi TLD'lerle başarmak için?
TylersSN

1
@iUseMagentoNow sadece noktaları artırın, örneğin: RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\.(.*)\. [NC](Kesin olarak, .uksomething.co
TLD'niz

Bu durumda .co, ikinci düzey bir etki alanıdır ve aslında etki alanınızın bir parçası değildir; burada .uk, ülke kodu TLD'dir. Dürüst olmak gerekirse, barındırma endüstrisinde çalışmış ve alan adları için yeni formatları görmüş olmak, resmi kullanımlar dışında kalan mevcut TLD formatlarını göremiyorum. hükümetler, kuruluşlar vb. Yakın gelecekte fqdn gibi fred.bloggs'u mevcut normlara benzer bir fiyatla kaydedebildiğinizde, kişisel web DNS açısından çok farklı görünecektir.
Chris

1

Aşağıdakiler, bir isteği olmayan herhangi bir isteğin önüne 'www' eklenmeli ve düzenlenen isteği yeni URI'ye yönlendirmelidir.

RewriteCond "%{HTTP_HOST}" "!^www\."         [NC]
RewriteCond "%{HTTP_HOST}" "(.*)"
RewriteRule "(.*)"         "http://www.%1$1" [R=301,L]

1
RewriteEngine On

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]

Bu example.com, www.example.comhariç tutulan alt alanlara yönlendirir .


Benim için bu, www.example.com'u www.www.example.com'a gönderiyor gibi görünüyor haha
Albert Renshaw

@Albert Belki de bunun nedeni tarayıcınızın önbelleğidir. Önbelleğinizi temizleyin ve Yeniden deneyin.
Amit Verma

Haklısın! Gizli modda (krom) koştum ve iyi çalıştı, teşekkürler!
Albert Renshaw

1
Bu genel kuralı çok seviyorum. Ancak, zaten iki nokta içerdiğinden domain.co.uk için çalışmaz . Bu kural, .co.uk için de çalışmasını sağlayacak şekilde nasıl değiştirilebilir?
Sacha Vorbeck

1
.Co.uk ve diğer alt cctld'ler için bu işe yarar: ^ ([^.] + \. [^.] +) (\. (Uk | ar | cy | ar | tr))? $ Ama ne yazık ki bazı karışıklar var tlds ( wiki.mozilla.org/TLD_List ) gibi domain.es ve domain.com.es'e izin veren es. Normal ifadeye | es eklemek, domain.es ve burada istenmeyen www.domain.es ile eşleşecektir. Bu karışık tipte alt cctld'leri işlemenin bir yolunu bulmalıyım
Sacha Vorbeck


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.