2017-05-23 15 views
1

最近、すべてのトラフィックをhttpsにリダイレクトしましたが、httpでサブドメインを保持したいと考えています。これを整理するのを手伝ってください。サブドメイン以外のすべてのトラフィックをhttpsにリダイレクトする方法

は、これが私のrewriterules

Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule^https://%1%{REQUEST_URI} [R=301,L] 

で、これはこれを整理するために私を助けてください、私の仮想ホストコード

<VirtualHost *:80> 
ServerAdmin [email protected] 
ServerName staging.example.com 
ServerAlias staging.example.com 
SetEnv  ENVIRONMENT staging 
DocumentRoot /var/www/staging/ 
ErrorLog  /var/log/apache2/example_staging_error.log 
CustomLog /var/log/apache2/example_staging_access.log combined 

<Directory /var/www/staging> 
AllowOverride All 
Include /etc/apache2/sites-available/example_dir_rules.conf 
</Directory> 


</VirtualHost> 

<VirtualHost *:80> 
ServerAdmin [email protected] 
ServerName example.com 
ServerAlias example.com 
SetEnv  ENVIRONMENT production 
DocumentRoot /var/www/production/ 
ErrorLog  /var/log/apache2/example_production_error.log 
CustomLog /var/log/apache2/example_production_access.log combined 

<Directory /var/www/production> 
Include /etc/apache2/sites-available/example_dir_rules.conf 
</Directory> 



</VirtualHost> 
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so 
#Listen 443 
<VirtualHost *:443> 
SSLEngine on 

SSLHonorCipherOrder On 

-------------ssl code---------- 

ServerName example.com 

-------------ssl code---------- 

ServerAdmin [email protected] 
ServerName example.com 
ServerAlias example.com 
SetEnv  ENVIRONMENT production 
DocumentRoot /var/www/production/ 
ErrorLog  /var/log/apache2/example_ssl_error.log 
CustomLog /var/log/apache2/example_ssl_access.log combined 


<Directory /var/www/production> 
Include /etc/apache2/sites-available/example_dir_rules.conf 
</Directory> 


</VirtualHost> 

です。前もって感謝します。

+0

"これが私のrewriterulesである" のようになりますか?サーバー設定にアクセスできるように見えるので、仮想ホストでこのリダイレクトを実行する必要があります。サブドメインを避ける方が効率的で、潜在的に簡単です。どのサブドメインですか?または、どちらのホストでHTTPSにリダイレクトしたいのですか? – MrWhite

+0

私は/etc/apache2/sites-available/example_dir_rules.confファイルに書き換えルールを書きましたが、このファイルをホストファイル –

答えて

1

2つの選択肢があります。メインドメインはexample.com(の痕跡があるため

1.はどちらかあなただけのwwwメインドメインと一致するルールを除去することができることをメインのドメインに

Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^example\.com$ 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

注意を一致させるために、あなたのファイルに条件を追加しますあなたの仮想ホストにはwww)。

警告:場合によっては、すべての仮想ホストに同じファイルを含めるべきではありません(次の参照)。

2.それとも、example.com(HTTP)バーチャルホストブロック内のルールを入れて直接ことができます。実際、他の2つ(example.comはhttps、staggingサブドメイン)は、あなたが望むことをするためのルールを必要としません。あなたの "rewriterules" です -

だから、あなたのconfigがこの

<VirtualHost *:80> 
ServerAdmin [email protected] 
ServerName staging.example.com 
ServerAlias staging.example.com 
SetEnv  ENVIRONMENT staging 
DocumentRoot /var/www/staging/ 
ErrorLog  /var/log/apache2/example_staging_error.log 
CustomLog /var/log/apache2/example_staging_access.log combined 

<Directory /var/www/staging> 
</Directory> 


</VirtualHost> 

<VirtualHost *:80> 
ServerAdmin [email protected] 
ServerName example.com 
ServerAlias example.com 
SetEnv  ENVIRONMENT production 
DocumentRoot /var/www/production/ 
ErrorLog  /var/log/apache2/example_production_error.log 
CustomLog /var/log/apache2/example_production_access.log combined 

<Directory /var/www/production> 
Options +FollowSymlinks 
RewriteEngine On 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
</Directory> 



</VirtualHost> 
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so 
#Listen 443 
<VirtualHost *:443> 
SSLEngine on 

SSLHonorCipherOrder On 

-------------ssl code---------- 

ServerName example.com 

-------------ssl code---------- 

ServerAdmin [email protected] 
ServerName example.com 
ServerAlias example.com 
SetEnv  ENVIRONMENT production 
DocumentRoot /var/www/production/ 
ErrorLog  /var/log/apache2/example_ssl_error.log 
CustomLog /var/log/apache2/example_ssl_access.log combined 


<Directory /var/www/production> 
</Directory> 


</VirtualHost> 
+0

に含めました。メインドメインの仮想ホストにHTTP(ポート80)のルールを直接置くことで、 'HTTPS'をチェックする必要があります。実際、上記のコードでは、mod_rewriteや ''ラッパーは必要ありません。これはmod_aliasを使った単一行です: 'Redirect 301/https:// example.com /'。 – MrWhite

+0

@ user82217あなたはそうです。条件を削除するのを忘れてしまいました(常に真であり、常に評価されていても)。実際、mod_rewriteを完全に削除して代わりに 'Redirect'を使ってmod_aliasを使うことができます –

関連する問題