web-gelistirme-sc.com

SunucuAdı olmadan varsayılan sanal Konak'ta HTTP'yi HTTPS'ye yönlendir

Apache sunucumda gelen tüm http isteklerini eşdeğer https isteğine yönlendirebilmek istiyorum. Buradaki yakalayıcı, ServerName belirtmeden varsayılan sanal Ana Bilgisayarım için bunu yapmak ve yeniden yönlendirmenin istek url'sinde görünen sunucu adıyla çalışmasını sağlamak istemem. Bunun gibi bir şey umuyorum:

NameVirtualHost *:80
<VirtualHost *:80>
    RedirectPermanent / https://%{SERVER_NAME}/
    ...
</VirtualHost>

Bu Redirect kullanarak mümkün mü yoksa Rewrite adresine başvurmak zorunda mıyım?

66

Bunu vhost config'inize eklemeyi deneyin:

RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_Host}$1 [R=301,L]
97
Jon Lin

Her ikisi de iyi çalışıyor. Ancak Apache docs 'a göre, basit yönlendirmeler için mod_rewrite kullanmaktan kaçınmalı ve bunun yerine Redirect kullanmalısınız. Bu yüzden onlara göre, tercihen:

_<VirtualHost *:80>
    ServerName www.example.com
    Redirect / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>
_

Redirect öğesinden sonraki ilk _/_, url, ikinci bölüm yönlendirileceği yerdir.

URL'leri bir alt etki alanına yönlendirmek için de kullanabilirsiniz: _Redirect /one/ http://one.example.com/_

82
orszaczky

Gereksiz yönlendirmeleri de atlamanın tam yolu budur;)

Bu kuralların .htaccess dosyalarında kullanılması amaçlanmıştır, çünkü bir *: 80 VirtualHost girişindeki bir RewriteRule şartı gerektirmez.

RewriteEngine on
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^/(.*) https://%{HTTP_Host}/$1 [NC,R=301,L]

Eplanations:

RewriteEngine on

==> motoru etkinleştirmek

RewriteCond %{HTTPS} off [OR]

==> eşleşme https olmayan bağlantı veya ([VEYA] ayarının yapılmaması gizli bir VE!

RewriteCond %{HTTP:X-Forwarded-Proto} !https

==> iletilen bağlantılarda eşleşme (proxy, loadbalancer, vb.) olmadan https

RewriteRule ^/(.*) https://%{HTTP_Host}/$1 [NC,R=301,L]

==> Her iki Koşuldan biri eşleşiyorsa, URL'nin tamamını tekrar yazıp, bunu müşteriye 'öğrenmesi' için bir 301 (bazıları yapar, bazıları yapmaz) ve L'yi son kural için verir.

35
Jimmy Koerting