我有一条简单的路线可以处理从数据库到正确跟踪链接的重定向。路线本身看起来像这样 -
Route::get('/{language}/go/{operator}', function($language, $operator) {
$operator = Operator::where('language',$language)->where('name',$operator)->first();
$tracking_url = $operator->visit_url;
if( isset($_GET['session_id']) ) $session_id = strip_tags($_GET['session_id']);
else $session_id = 1;
if( $operator->dynamic_parameter ) {
$full_url = $tracking_url.'&'.$operator->dynamic_parameter.'='.$session_id;
}
else {
$full_url = $tracking_url;
}
return redirect($full_url)->header('Referrer-Policy', 'no-referrer');
});
整个网站都驻留在HTTPS上(由heroku处理),作为重定向链的额外层,我又添加了2个东西 -
1)添加一些额外的服务器配置(apache_app.conf)并使用procfile加载 -
apache_app.conf
DirectoryIndex index.php index.html index.htm
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
procfile
web: vendor/bin/heroku-php-apache2 -C apache_app.conf public/
2)强制所有路线通过https重定向,使用 web.php 顶部的此片段 -
if (env('APP_ENV') === 'prod') {
\URL::forceScheme('https');
}
尝试通过http://访问我的应用时 - 我将-am-重定向到https://版本,似乎没问题。但是当我使用路由' s / en / go / xxxx端点调查重定向链时,我得到一些奇怪的链接,其中包括首先重定向回http版本,然后将其重定向回https一。因此,当尝试在iframe中加载其中一个跟踪网址时 - 我收到错误 -
Mixed Content: The page at 'https://www.website.com/us/reviews/xxxxx' was loaded over HTTPS, but requested an insecure resource 'http://www.website.com/us/go/xxxxx?session_id=1'. This request has been blocked; the content must be served over HTTPS.
重定向链看起来像这样 -
Result
https://www.website.com/us/go/xxxxx/?session_id=332
301 Moved Permanently
http://www.website.com/us/go/xxxxx?session_id=332
301 Moved Permanently
https://www.website.com/us/go/xxxxx?session_id=332
302 Found
https://track.xxxxx.com/visit/?bta=123456&nci=654321&utm_campaign=website_camapign&afp=332
答案 0 :(得分:2)
在您的apache配置文件中,确保您的ServerName
设置为https://www.website.com
而不是http://www.website.com
。
来自docs:
有时,服务器在处理SSL的设备后面运行,例如反向代理,负载均衡器或SSL卸载设备。在这种情况下,请在ServerName指令中指定客户端连接的https://方案和端口号,以确保服务器生成正确的自引用URL。
这可能是根据需要使用http
代替https
生成第一次重定向的原因。