2017-03-23 15 views
1

コミュニティ。私は古代のColdFusionサイトを(真剣に)移行だ、と私たちは何千ものRewriteRuleエントリにHTTPSを適用します

/what-this-page-really-is 

Googleのような

index.cfm?id=1&this=that 

に、より合理的な対応のようなページの古いバージョンからの301のリダイレクトの文字通り何千を持ってそれらを一覧表示すると言いますひとつひとつ、それが私がやっていることです。しかし、これらのリダイレクトのすべてにおいて、HTTPSを強制したいと思っています。私たちが今持っていることはこれです:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

RewriteRule ^thing.cfm$ /thing/? [R=301,L,NC] 
RewriteCond %{QUERY_STRING} id=1 [NC] 
RewriteRule ^blah.cfm$ /awesome-sauce/? [R=301,L,NC] 

それは正常に動作しますが、Googleはそれが技術的にこれらの古いリンク用の2つのリダイレクトだと文句を言います。可能な解決策は、リダイレクトして、明示的にすべての単一の* .CFMはそうのように、ページのHTTPSバージョンに行くリダイレ​​クトしますHTTPSから* .CFMファイルを除外するために、次のようになります。

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} !(.*)cfm$ 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

RewriteRule ^thing.cfm$ https://%{HTTP_HOST}/thing/? [R=301,L,NC] 
RewriteCond %{QUERY_STRING} id=1 [NC] 
RewriteRule ^blah.cfm$ https://%{HTTP_HOST}/awesome-sauce/? [R=301,L,NC] 

しかし、数千行以上、それはです.htaccessファイルに余分な文字がたくさんあります。私はこれがapache configの方が優れていることを知っていますが、今はそのオプションがありません。

私の質問:後続のすべての* .cfm 301リダイレクトにHTTPSパラメータを適用するフラグを設定する方法はありますか?

ありがとうございました!

答えて

1

のではなく、あなたが一番下にあなたのhttp->httpsルールを移動し、Google(または任意の外部のクライアントが)ただ1つのリダイレクトを取得するようにあなたのリダイレクトフラグからRフラグを削除することができ、各301ハンドラでhttps://を強制します。

RewriteEngine On 

RewriteRule ^thing\.cfm$ /thing/? [L,NC] 

RewriteCond %{QUERY_STRING} id=1 [NC] 
RewriteRule ^blah\.cfm$ /awesome-sauce/? [L,NC] 

# all other rules here but remove R=301 flag 

# finally do a http->https with rewritten URI 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L,NE] 

テストする前にブラウザのキャッシュをクリアしてください。

+1

これは理にかなっています。 L(ast)フラグの後に別のRewriteRuleを実行することはできませんでした。ご助言ありがとうございました。このソリューションは私の主な目標を達成するだけでなく、ファイルサイズの約5%を削減してR = 301を取り除きました。 – Sarthaz

関連する問題