社区。我正在迁移一个古老的ColdFusion网站(认真),我们从旧版本的网页中获得了数千个301重定向,例如
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]
它工作正常,但谷歌抱怨它在技术上是这些旧链接的两个重定向。一种可能的解决方案是从HTTPS重定向中排除* .cfm文件,并明确地将每个* .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重定向?
谢谢!
答案 0 :(得分:1)
您可以在底部移动https://
规则并从重定向标记中删除http->https
标记,而不是在每个301处理程序中强制执行R
,以便Google(或任何外部客户端)获取只有一个重定向。
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]
确保在测试前清除浏览器缓存。