.htaccess alt alan adını dizine yeniden yaz


Yanıtlar:


107

Bunu .htaccess dosyanıza eklemeyi deneyin:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub.domain.com
RewriteRule ^(.*)$ /subdomains/sub/$1 [L,NC,QSA]

Daha genel bir kural için (yalnızca herhangi bir alt alan adıyla değil sub) son iki satırı bununla değiştirin:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]

3
Ansari'nin çözümü işe yarayacak, ancak gittiğimde http://test.domain.comURL beni adresine yönlendiriyor http://test.domain.com/subdomains/test/. /subdomains/test/Sonunda göstermeden mümkün mü ?
Erik Djupvik

2
Bu durumda, ben kullanmakta içine bakmak zorunda inanıyoruz mod_proxy ve belirtmek Pek olarak bayrak L.
Ansari

1
Hayır, http://test.domain.com/subdomains/test/yalnızca gösterilmesini istediğimde adresine yönlendiriyorhttp://test.domain.com/
Erik Djupvik

1
Nasıl yönlendirildiğini göremiyorum test.domain.com/subdomains/test- belki burada başka bir şeyler oluyor. RewriteBase /Hemen sonra ekleyebilir misin RewriteEngine on? Ayrıca, göstermeye devam etmek test.domain.comistiyorsanız, mod_proxy ve [P]bayrağı kullanmanız gerekecektir .
Ansari

1
@ Anubhava'nın buradaki cevabını kullanarak çalışmasını sağlayabildim: stackoverflow.com/a/22395008/128984
Micah

50

Ben mod_rewrite uzmanı değilim, sık sık bununla uğraşıyorum, ancak bunu sitelerimden birinde yaptım, koşullarınıza bağlı olarak başka bayraklar vb. Gerekebilir. Bunu kullanıyorum:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteCond %{REQUEST_URI} !^/subdomains/subdomain
RewriteRule ^(.*)$ /subdomains/subdomain/$1 [L] 

Sitenin geri kalanı için diğer tüm yeniden yazma kuralları, alt alan adı yeniden yazmalarınıza müdahale etmelerini önlemek için daha sonra uygulanmalıdır.


Öyle derim ki. Bu ayar, benim cevap olarak aynı şekilde sağ biridir bulundu burada .
Chetabahana

5
Bir referans olarak, .htaccessbu sayfaya ile başlayan birinin gelmesi durumunda (benim yaptığım gibi), gerçek .htaccessdosyayı oluşturmanın yanı sıra , etkili AllowOverrideolması için VirtualHostayarlarınızda ayarlamanız gerekir ( stackoverflow.com/a/22819550/1657502 ) , Apache etkinleştirmek rewritemodülü ve sonra Apache (yeniden stackoverflow.com/a/5758551/1657502 )
Antonio Vinicius Menezes Medei

Alt alan adını ziyaret etmek için www kullanırsanız bu işe yaramayacaktır. @Minh çözümü her durumda çalışacaktır.
Rohan Khude

@RohanKhude, www.example.com ve example.com'un farklı içerikler sunmasını istiyor musunuz? Çünkü genellikle SEO için, www.example.com’un example.com’a kalıcı bir yönlendirme yapması veya tam tersi olması gerekir.
Lee Kowalkowski

1
Bir alt alan adının alt alanı olarak @RohanKhude www, aynı zamanda DNS düzeyinde de çalışmanız gereken bir şey değil mi? Herhangi bir rastgele alt alan adı için çalışması gerektiğine dair beklentinizin yanlış olduğunu düşünüyorum. Minh'in cevabı ( stackoverflow.com/a/41389905/30945 ) .htaccess yapılandırmanızın 1 ve yalnızca 1 alt alanı desteklediğini varsayar, bu nedenle bu açıdan daha az güçlüdür. Benim çözümüm ihtiyaç duyduğunuz kadar alt alanı destekliyor, ancak evet, desteklenen her alt alanı açıkça tanımlamanız gerekiyor, ancak isteğe bağlı bir www.önek muhtemelen yeniden yazmadan çok yeniden yönlendirme yoluyla destekleniyor.
Lee Kowalkowski

18

.Htaccess'te bir alt alan adını bir alt klasöre yeniden yazmak için aşağıdaki kuralı kullanabilirsiniz :

RewriteEngine On

 # If the host is "sub.domain.com"
 RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
 # Then rewrite any request to /folder
 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

Satır satır açıklama:

  RewriteEngine on

Yukarıdaki satır, sunucuya URL'leri yeniden yazmak için motoru açmasını söyler.

  RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]

Bu satır, bir regex kalıbı kullanarak HTTP ana bilgisayarıyla eşleştiğimiz RewriteRule için bir koşuldur. Koşul, ana bilgisayarın alt alan.com olması durumunda kuralı yürüteceğini söyler .

 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

Kural, http://sub.domain.com/foo ile eşleşir ve dahili olarak http://sub.domain.com/folder/foo adresine yönlendirir .

Değiştir sub.domain.com alt alan adı ile ve size alt alanınızı işaret etmek istediğiniz klasörün adı ile klasör.


1
Bu benim için doğru cevap - buraya nasıl geldiğimin açıklaması aşağıdaki gibi. Buraya, ana site TLD'sine SSL yüklediğimde görünüşte kırılan alt etki alanı yeniden yönlendirmesiyle ilgili eski bir sorun arayan geldi. Yönlendirme başlangıçta hala ana site TLD'sini kullanmaya çalışıyordu ve güvenlik kurallarını ihlal ediyordu. İhtiyacım olan şey, alt alanı (bu tamamen farklı bir TLD'de) aynı ana bilgisayarda ancak ana siteden uzakta tutmaktı. Yukarıdaki gibi bir yeniden yazma kuralı eklemek, alt alan adının tamamını ana TLD sitesi altında barındırılan klasöre iletmemi sağladı.
Richard Bown

8

Aynı sorunu yaşadım ve http://www.webmasterworld.com/apache/3163397.htm adresinde ayrıntılı bir açıklama buldum

Benim çözümüm (alt etki alanları içeriği şu adda bir klasörde olmalıdır sd_subdomain:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} subdomain\.domain\.com
RewriteCond $1 !^sd_
RewriteRule (.*) /sd_subdomain/$1 [L]

1
Benim için çalışmıyor, etki alanının dns bölgesinde bir şey yapılandırmam gerekir mi?
totoaussi

1
@totoaussi, her alt alan adı için aynı sunucuya işaret eden bir * A kaydı veya bir A kaydı oluşturmalısınız.
Pablo Torrecilla

4

Bu, aynı klasöre bir alt etki alanına yeniden yönlendirir:

.httaccess

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain\.com/subdomains/%1


2

Alt etki alanı dizinini yeniden yönlendir:

RewriteCond %{HTTP_HOST} ^([^.]+)\.(archive\.example\.com)$ [NC]
RewriteRule ^ http://%2/%1%{REQUEST_URI} [L,R=301]

0

Herhangi bir alt alan talebi için şunu kullanın:

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.band\.s\.co 
RewriteCond %{HTTP_HOST} ^(.*)\.band\.s\.co 
RewriteCond %{REQUEST_URI} !^/([a-zA-Z0-9-z\-]+) 
RewriteRule ^(.*)$ /%1/$1 [L] 

Sadece ihtiyacınız olan alt alan adıyla aynı klasör yapın. Klasör şu şekilde olmalıdır: sub.domain.com için domain.com/sub .


Bu benim için çalışıyor ancak dosyayı tutmuyor. Örneğin sub.domain.com/index.php atın 404
Paolo
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.