2010-12-09 23 views
9

Ben .htaccess dosyaları ile çok aşina değilim, ben bir yerde zaten şu yeniden yazma kuraldan dev.example.com) gibi (bir şey bir alt dışlamak çalışıyorum:.htaccess mod_rewrite kurallarından bir alt alan hariç tutuluyor mu?

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

Bu kural sadece girmesini kimseyi yasaklar example.com veya http://example.com ve URL istenen sunum zorlar, http://www.example.com.

bu yeniden yazma kuralından bir alt alan hariç birkaç seçenekleri denedik, ama boşuna ettik. sitede dizinleri her birinin kendi var. htaccess dosyası, ama bu hala bir öncelik alıyor gibi görünüyor Herhangi bir fikir? Teşekkürler!

cevap

12

Varolan kural zaten bir alt etki alanını içermiyor. Ayrıca düzenli ifadeler kurtulabilirsiniz

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

:

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

sözdizimi bunu emin değilim http://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#rewritecond

+0

Bu sözdizimi işe yarayacak gibi görünüyor, ancak yineleme hatalarına neden oluyor. Herhangi bir fikir? – MindSculpt

+0

Ancak, ilk örneğiniz normal ifadeler kullanarak işe yarayacak gibi görünüyor ... – MindSculpt

+0

Her ikisi de snippet'ler eşdeğer olmalı ve benim için çalışmalı. Tarayıcınızın önbelleğini temizlemenizi ve tekrar denemenizi öneririz. –

2

bulunabilir Sadece Yeni bir koşul eklemek gerekir sizin için uygun olabilir, ancak .htaccess dosyaları yerine apache virtualhosts yapılandırmasını kullanmak iyi bir uygulamadır. Bir mod_rewrite kural genellikle daha güvenlidir

<VirtualHost *:80> 
    ServerName example.com 
    RedirectMatch permanent ^(.*) http://www.example.com$1 
</VirtualHost> 

: - Bu durumda, sigara www için> www yönlendirme, genellikle böyle bir şey kullanın.

+0

Aslında hiçbir şeyle eşleşmediğiniz için, 'Yönlendirme' veya 'Yönlendirme Sırası' yeterli olmalıdır. –

+0

Uzun zaman önce bu konfigürasyon parçasını yazdım ve daha sonra olduğu gibi birkaç yerde yeniden kullandım, bu yüzden 'Redirect' yerine neden RedirectMatch kullandığımı tam olarak hatırlamıyorum, ama sanırım tek yol buydu Sabit yeni URL'ye yönlendirmek yerine, tam istek yolunu korumak için. IE: 'http: // example.com/path/to/page.html'' http: // www.example.com/yol/to/page.html' adresine yönlendirilir. – redShadow

+0

Tüm 'Yönlendirme *' yönergeleri bu şekilde çalışır ;-) –

2
RewriteEngine On 
RewriteCond %{HTTP_HOST} !^(dev|www)\.example\.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] 
İlgili konular