2017-03-23 31 views
1

社區。我遷移一個古老的ColdFusion網站(嚴重),我們有成千上萬的從舊版本的網頁301個重定向像在成千上萬的301個RewriteRule條目中實施HTTPS

index.cfm?id=1&this=that 

更合理的同行一樣

/what-this-page-really-is 

谷歌表示,列出它們一個接一個,所以這就是我正在做的事情。但是,在所有這些重定向中,我們也希望實施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] 

它工作正常,但谷歌抱怨說,它在技術上這些舊鏈接兩次重定向。一種可能的解決辦法是排除* .CFM文件從HTTPS重定向和明確地使每一個* .CFM重定向到該頁面的HTTPS版本,像這樣:

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配置中更好,但我現在沒有這個選項。

我的問題:有沒有辦法設置一個標誌,將HTTPS參數應用於所有後續的* .cfm 301重定向?

謝謝!

回答

1

,而不是每301處理器執行https://你可以在底部移動你的http->https規則,並從您的重定向標誌刪除R標誌,以便谷歌(或任何外部客戶端)只能獲得一個單一的重定向。

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

相關問題