2016-08-25 5 views
1

は、私はこの答えhttps://stackoverflow.com/a/16800319/1283556htaccessのサブドメインの一致のための以下のすべてのルールをスキップ

に問題を抱えている私の現在のhtaccess 301は、できるだけ少ないリダイレクトでwww.https://を追加し、https://www.example.comexample.comをリダイレクトします。私はサブドメインがm.example.comであれば、それはwww.またはhttps://を追加したくない

ので、私は、この条件に合致し、何のルールを入れていないし、仕事と将来の状況をやって停止する[L]フラグを使用して思いました。

RewriteEngine On 

# Skip forcing www or https if the 'm' subdomain is being used for mobile 
RewriteCond %{HTTP_HOST} ^m\. [NC] 
RewriteRule - [L] 

# Force www. and HTTPS 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule^https://www.%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L] 

# Force HTTPS (www. was already there) 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

# Don't remap resources to the index processor, just add SSL 
RewriteCond %{REQUEST_FILENAME} ^.*^.ico$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.css$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.js$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.gif$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.png$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.jpg$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.jpeg$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.xml$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.txt$$ 
RewriteRule ^(.*)$ https://$1 [R=301,L] 

# Remap /page/filter/?query to /index.php?page=page&filter=filter&query 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?([^/]+)/*([a-zA-Z0-9-]*)/?$ /index.php?page=$1&filter=$2 [QSA] 

上記の効果がある:

example.com »301» https://www.example.com 
m.example.com »301» https://www.m.example.com 

所望の効果がある:

example.com »301» https://www.example.com 
m.example.com (do nothing, just serve content from example.com/mobile) 

Serverバージョン:のApache/2.4.10(Unixの)はOpenSSL/1.0.1e -fips mod_bwlimited/1.4 Apache

私はこの仕事を得たことに注目する価値がある解決策として、INGのが、私はそれが回避策ではなく、リニアソリューションを検討:

RewriteEngine On 

# Force www. and HTTPS 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTP_HOST} !^m\. [NC] 
RewriteRule^https://www.%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L] 

# Force HTTPS (www. was already there) 
RewriteCond %{HTTP_HOST} !^m\. [NC] 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

# Don't remap resources to the index processor, just add SSL 
RewriteCond %{REQUEST_FILENAME} ^.*^.ico$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.css$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.js$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.gif$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.png$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.jpg$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.jpeg$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.xml$$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.*^.txt$$ 
RewriteRule ^(.*)$ https://$1 [R=301,L] 

# Remap /page/filter/?query to /index.php?page=page&filter=filter&query 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?([^/]+)/*([a-zA-Z0-9-]*)/?$ /index.php?page=$1&filter=$2 [QSA] 
+0

正常に動作するはずです。ブラウザのキャッシュを完全にクリアして再テストします。 – anubhava

+0

htaccessは実際にクライアントに送信されないので、サーバーによって行われない限り実際にはキャッシュされないという印象を受けていますが、これまで経験したことがなく、サーバーの内部キャッシュをクリアする方法もわかりません(それが本当にあなたが示唆しているものならば)。いずれにしてもブラウザのキャッシュをクリアしましたが、まだhttps://www.m.example.comにリダイレクトされています –

+0

Apacheのバージョンは何ですか? –

答えて

0

あなたの元と更新された質問は、SEOのランキングやユーザーエクスペリエンスの両方に適していない2つの301リダイレクトルールがあります。

あなたはできる両方のルールは、同じルールにm.ホストを除くの世話を一つにhttp -> httpsforce-wwwをIEとも組み合わせ:

RewriteEngine On 

RewriteCond %{HTTP_HOST} !^www\. [NC,OR] 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(?!m\.)(?:www\.)?(.+)$ [NC] 
RewriteRule^https://www.%1%{REQUEST_URI} [R=301,L,NE] 

非常に最初のルールとしてこのルールを維持することを確認しますと、ブラウザのキャッシュを完全にクリアした後にテストしてください。

+1

私のバージョンでは2つの301は実行されませんでしたが、これは非常にきれいに見えます。私はあなたがhttp:// www.exampleに行くとhttps:// www.www.exampleにリダイレクトされますが、確認することになるのではないかと心配しています。ありがとう –

+0

実際にあなたが 'http:// example.com'のようなURLでリクエストを送信した場合、あなたのバージョンは2つの301リダイレクトを行います。 301は 'https:// example.com'に、301は' https:// www.example.com'に2番目の301です。ブラウザのキャッシュは表示されないかもしれませんが、コマンドラインのcurlでテストすれば、それは両方になります。 – anubhava

+0

しかし、私の最初の301ルールでは、https // example.comに行くと、最初のルールセットで1回のヒットでhttpsとwwwが追加され、2回は実行されません。私は301リダイレクションサービスを試して、それがSEOフレンドリーであることを確認しました –

関連する問題