Soru Apache VirtualHost içinde URL yönlendirme?


Bazı VirtualHost'ları kurduğum Apache'li özel bir sunucum var. Www alan adının yanı sıra www alan adıyla ilgilenecek bir tane kurdum.

Www için VH .conf dosyam:

<VirtualHost *>
  DocumentRoot /var/www/site
  ServerName www.example.com
  <Directory "/var/www/site">
    allow from all
  </Directory>
</VirtualHost>

Bununla .htaccess:

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

Www’ı www olmayan versiyona yönlendirmenin basit bir yolu var mı? Şu anda her iki versiyonu da aynı şekilde gönderiyorum DocumentRoot ve kullanarak .htaccess ama eminim VirtualHost dosyasında yapabilmem gerekir.


56
2018-03-08 20:56


Menşei


stackoverflow.com/questions/42500012/... - rajeev


Cevaplar:


Çıkıyor mod_rewrite VirtualHosts dosyasında kurallar gayet iyi. RewriteBase kural. Bununla bitti:

<VirtualHost *>
  ServerName www.example.com
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www.example.com
  RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301]
</VirtualHost>

DÜZENLEME: yorumlarda joschi tavsiyesi üzerine, şimdi kullanarak bu basitleştirilmiş sürümünü kullanıyorum Redirect direktif mod_alias:

<VirtualHost *>
  ServerName www.example.com
  Redirect 301 / http://example.com/
</VirtualHost>

101
2018-03-08 21:34



Bunun için mod_rewrite gerekmez. Bunun yerine mod_alias ve onun RedirectPermanent direktifini kullanın. - joschi
@joschi: Bunun avantajı ne olurdu? Daha hızlı mı? - DisgruntledGoat
Müşteriye yeniden yönlendirmek için tüm kontrolleri ve olasılıkları ile birlikte tam yazılmış yeniden yazma motoruna ihtiyacınız yoktur. Mod_alias mod_rewrite kadar karmaşık olmadığından (marjinal olarak) daha hızlı olur ve mod_rewrite ile iki yerine yalnızca bir yönerge (RedirectPermanent) gerekir. Son olarak, en azından IMHO'nun, birisinin ilk kez göründüğü konfigürasyonda ne olduğunu anlamak daha kolay. - joschi
Bazı garip sebeplerden dolayı Redirect 301 .. bizim için çalışmadı. RewriteRule seçeneğini kullanmak zorundaydık. - so_mv
NOT: Windows Server 2008 R2 Enterprise'da WAMPSERVER 2.0 üzerinde PHP 5.3.0 kullanma, dahil değil :80 sonra VirtualHost * nedenleri her şey "Yasak" dönmek için! - Cees Timmerman


301 yönlendirmeleriyle çok dikkatli olun çünkü varsayılan olarak, 301 yönlendirmesini alan bir tarayıcı onu kalıcı olarak saklar. Bu, söz konusu tarayıcının etki alanına erişmeye çalıştığında göreceği denetimi elinizden kaldıracağınız anlamına gelir. www.example.com.

Örneğin bu tartışmaya bakın http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/

Yani ya önbelleğe alınmadığından emin olun, ya da mod_proxy'yi kullanın (mod_proxy'yi öneririm).

Kullanıcının tarayıcı adres çubuğunda URL değişikliğini görmesine izin verirseniz, mod_rewrite özelliğini kullanın:

<VirtualHost *>
 ServerName www.example.com
 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^www.example.com
 RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301,E=nocache:1]
## Set the response header if the "nocache" environment variable is set
## in the RewriteRule above.
 Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache
## Set Expires too ...
 Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache
</VirtualHost>

"Yönlendirme" nin kullanıcı tarafından görünmesini istemiyorsanız mod_proxy'yi kullanın:

<VirtualHost *>
 ServerName www.example.com
 ProxyRequests Off
 <Proxy *>
 Order Deny,Allow
 Deny from all
 Allow from 203.0.113.67
 </Proxy>
 ProxyPass / http://example.com/
 ProxyPassReverse / http://example.com/
</VirtualHost>

Mod_proxy'nin kötü yapılandırıldığında ağınıza zarar verebileceği unutulmamalıdır.


3
2018-01-18 11:29



301'in anlamı, bir kalıcı yönlendirme; kalıcı olmayan bir yönlendirme istiyorsanız, bunun yerine 302 veya 307'yi kullanmalısınız. - nickgrim


Ekleyebilirsin ServerAlias example.com göre VirtualHost ancak performans bir yönlendirmeden farklı olacaktır.

Düzenle

Yönlendirmek istediğiniz ve gelişmiş işlevselliklere ihtiyacınız olmadığı için, Redirect sizin için yeterli olmalıdır. Sen koymak Redirect bir VirtualHost yönergesi altında.

Bir istemci tarafı çözümü kullanmak meta refresh etiket.


2
2018-03-08 21:00



Biraz daha açıklayabilir misin? Nasıl yönlendiririm? www.example.com için example.com bu yöntemi kullanarak? - DisgruntledGoat
Birincil vhostunuzda, her ikisi için de girişleriniz var. ServerName ve ServerAlias. Bir tane example.com ve diğer www.example.com var. Ardından, her iki dns girdisi, aynı sanal alanda belirtilen belgelere erişir. - Warner
Ben yapmak istiyorum yönlendirme Ancak, sadece bir takma ad değil. - DisgruntledGoat
O zaman Joshchi'nin tavsiyesi sizin için iyi bir yaklaşım olabilir. Kıllar bu noktada bölünmüş gibi görünüyor. - Warner


iyi, www.example.com SERVERNAME için bir sanal ana bilgisayar oluşturabilir ve sunucu.com.com ile başka bir sanal ana bilgisayara yönlendirme yapabilirsiniz.


1
2018-03-08 21:18