header("Location: url") 不重定向
header("Location: url") does not redirect
我在尝试从我的 AMP 页面重定向到其他页面时浪费了很多时间。提交表单时,xhr-action 使用 POST 发送数据调用 php 文件。 此 php 文件设置了一个新位置以将页面重定向到另一个 。我在 php 文件中要重定向的代码是下一个:
<?php
header("Content-type: application/json");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: https://www.dominio.com/amp/*");
header("AMP-Access-Control-Allow-Source-Origin: https://www.dominio.com");
header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin");
$especi=$_POST["especialidad"];
$paises=$_POST["ES"];
$paismx=$_POST["MX"];
$paispr=$_POST["PR"];
$paiscl=$_POST["CL"];
$paisco=$_POST["CO"];
$paisar=$_POST["AR"];
if(isset($paises)){
$urlbase="https://www.dominio.es/p/";
$pais="ES";
$provin=$paises;
$pobla=0; //$_POST["zn2"];
}
/*
else if(isset($paismx)){
$urlbase="https://www.dominio.mx/p/";
$pais="MX";
$provin=$paismx;
$pobla=$_POST["zn2"];
}
else if(isset($paispr)){
$urlbase="https://www.dominio.com/p/";
$pais="PR";
$provin=$paispr;
$pobla=$_POST["zn2"];
}
else if(isset($paiscl)){
$urlbase="https://www.dominio.cl/p/";
$pais="CL";
$provin=$paiscl;
$pobla=$_POST["zn2"];
}
else if(isset($paisco)){
$urlbase="https://www.dominio.co/p/";
$pais="CO";
$provin=$paisco;
$pobla=$_POST["zn2"];
}
else if(isset($paisar)){
$urlbase="https://www.dominio.com.ar/p/";
$pais="AR";
$provin=$paisar;
$pobla=$_POST["zn2"];
}*/
$queryespe="SELECT * FROM tx WHERE Id='$especi'";
$resultespe = mysqli_query($link,$queryespe);
$fila = mysqli_fetch_array($resultespe);
$especialidad=$fila['Keyword'];
$especialidad=reemplazargui($especialidad);
$especialidad=reemplazarac($especialidad);
if($pobla!=0){
$querypo="SELECT * FROM ts WHERE Id='$pobla'";
$resultpo = mysqli_query($link,$querypo);
$filapo = mysqli_fetch_array($resultpo);
$poblacion=reemplazargui($filapo['Keyword']);
$ulr=$urlbase.$especialidad."/".reemplazarac($poblacion)."/";
mysqli_close($link);
header ("Location: $ulr");
die();
}else{
$querypo="SELECT * FROM tx_2 WHERE Id='$provin'";
$resultpo = mysqli_query($link,$querypo);
$filapo = mysqli_fetch_array($resultpo);
$poblacion=reemplazargui($filapo['Keyword']);
$ulr=$urlbase.$especialidad."/".reemplazarac($poblacion)."/";
mysqli_close($link);
$ulr = html_entity_decode($ulr);
header ("Location: $ulr");
die();
}
?>
进程正确到达entity_decode,我放入header的url(ulr)是正确的。
我从 chrome 网络分析中得到的响应是下一个(我不明白为什么同一个 url 存在两个启动器,此外,它们不起作用)。
错误日志:
Fetch API cannot load
https://www.dominio.com/amp/include/listado.php?__amp_source_origin=http%3A%2F%2Fwww.dominio.com.
Redirect from
'https://www.dominio.com/amp/include/listado.php?__amp_source_origin=http%3A%2F%2Fwww.dominio.com'
to 'https://www.dominio.es/m/Alergologo/Albacete-Provincia/' has
been blocked by CORS policy: The 'Access-Control-Allow-Origin' header
has a value 'https://www.dominio.com/amp/*' that is not equal to
the supplied origin. Origin 'http://www.dominio.com' is therefore
not allowed access. Have the server send the header with a valid
value, or, if an opaque response serves your needs, set the request's
mode to 'no-cors' to fetch the resource with CORS disabled.
Fetch failed
https://www.dominio.com/amp/include/listado.php?__amp_source_origin=http%3A%2F%2Fwww.dominio.com
: Failed to fetch
Uncaught Error: Form submission failed:: Fetch failed
https://www.dominio.com/amp/include/listado.php?__amp_source_origin=http%3A%2F%2Fwww.dominio.com:
Failed to fetch reported
at na.f.assert (log.js:295)
at xhr-impl.js:164
因此,我需要重定向到另一个页面,该页面从 AMP 页面调用到我正在显示的 php 文件,该文件必须重定向到最终页面。重定向不适用于此代码。
编辑:问题可能出在 CORS 策略上,但我已将此行添加到 htaccess 文件中,但仍然无法正常工作。
<IfModule mod_headers.c>
<FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
编辑 2:
修改 headers:
ob_start();
header("Content-type: application/json");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: https://www.dominio.com/amp/*");
header("AMP-Access-Control-Allow-Source-Origin: https://www.dominio.com/amp/*");
header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin");
错误:
Fetch API cannot load
https://www.dominio.com/amp/include/listado.php?__amp_source_origin=http%3A%2F%2Fwww.dominio.com.
Redirect from
'https://www.dominio.com/amp/include/listado.php?__amp_source_origin=http%3A%2F%2Fwww.dominio.com'
to 'https://www.dominio2.es/m/Alergologo/Alicante-Provincia/' has been
blocked by CORS policy: The 'Access-Control-Allow-Origin' header has a
value 'https://www.dominio.com/amp/*' that is not equal to the
supplied origin. Origin 'http://www.dominio.com' is therefore not
allowed access. Have the server send the header with a valid value,
or, if an opaque response serves your needs, set the request's mode to
'no-cors' to fetch the resource with CORS disabled.
编辑 3:已解决
添加 headers 以允许 CORS 解决了这个问题。必须将它们添加到所有受影响的域中。
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: https://www.dominio.com/amp/*");
header("AMP-Access-Control-Allow-Source-Origin: https://www.dominio.com/amp/*");
header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin");
REPLACE,
header ("Location: $ulr");
die();
WITH,
header ("Location: $ulr");
?>
<script type="text/javascript">
location.href = '<?php echo $ulr ?>';
</script>
<?php
die();
解决方案添加到 post,编辑 3.
允许CORS的版本headers解决了这个问题。必须将它们添加到所有受影响的域中。
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: https://www.dominio.com/amp/*");
header("AMP-Access-Control-Allow-Source-Origin: https://www.dominio.com/amp/*");
header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin");
我在尝试从我的 AMP 页面重定向到其他页面时浪费了很多时间。提交表单时,xhr-action 使用 POST 发送数据调用 php 文件。 此 php 文件设置了一个新位置以将页面重定向到另一个 。我在 php 文件中要重定向的代码是下一个:
<?php
header("Content-type: application/json");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: https://www.dominio.com/amp/*");
header("AMP-Access-Control-Allow-Source-Origin: https://www.dominio.com");
header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin");
$especi=$_POST["especialidad"];
$paises=$_POST["ES"];
$paismx=$_POST["MX"];
$paispr=$_POST["PR"];
$paiscl=$_POST["CL"];
$paisco=$_POST["CO"];
$paisar=$_POST["AR"];
if(isset($paises)){
$urlbase="https://www.dominio.es/p/";
$pais="ES";
$provin=$paises;
$pobla=0; //$_POST["zn2"];
}
/*
else if(isset($paismx)){
$urlbase="https://www.dominio.mx/p/";
$pais="MX";
$provin=$paismx;
$pobla=$_POST["zn2"];
}
else if(isset($paispr)){
$urlbase="https://www.dominio.com/p/";
$pais="PR";
$provin=$paispr;
$pobla=$_POST["zn2"];
}
else if(isset($paiscl)){
$urlbase="https://www.dominio.cl/p/";
$pais="CL";
$provin=$paiscl;
$pobla=$_POST["zn2"];
}
else if(isset($paisco)){
$urlbase="https://www.dominio.co/p/";
$pais="CO";
$provin=$paisco;
$pobla=$_POST["zn2"];
}
else if(isset($paisar)){
$urlbase="https://www.dominio.com.ar/p/";
$pais="AR";
$provin=$paisar;
$pobla=$_POST["zn2"];
}*/
$queryespe="SELECT * FROM tx WHERE Id='$especi'";
$resultespe = mysqli_query($link,$queryespe);
$fila = mysqli_fetch_array($resultespe);
$especialidad=$fila['Keyword'];
$especialidad=reemplazargui($especialidad);
$especialidad=reemplazarac($especialidad);
if($pobla!=0){
$querypo="SELECT * FROM ts WHERE Id='$pobla'";
$resultpo = mysqli_query($link,$querypo);
$filapo = mysqli_fetch_array($resultpo);
$poblacion=reemplazargui($filapo['Keyword']);
$ulr=$urlbase.$especialidad."/".reemplazarac($poblacion)."/";
mysqli_close($link);
header ("Location: $ulr");
die();
}else{
$querypo="SELECT * FROM tx_2 WHERE Id='$provin'";
$resultpo = mysqli_query($link,$querypo);
$filapo = mysqli_fetch_array($resultpo);
$poblacion=reemplazargui($filapo['Keyword']);
$ulr=$urlbase.$especialidad."/".reemplazarac($poblacion)."/";
mysqli_close($link);
$ulr = html_entity_decode($ulr);
header ("Location: $ulr");
die();
}
?>
进程正确到达entity_decode,我放入header的url(ulr)是正确的。 我从 chrome 网络分析中得到的响应是下一个(我不明白为什么同一个 url 存在两个启动器,此外,它们不起作用)。 错误日志:
Fetch API cannot load https://www.dominio.com/amp/include/listado.php?__amp_source_origin=http%3A%2F%2Fwww.dominio.com. Redirect from 'https://www.dominio.com/amp/include/listado.php?__amp_source_origin=http%3A%2F%2Fwww.dominio.com' to 'https://www.dominio.es/m/Alergologo/Albacete-Provincia/' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header has a value 'https://www.dominio.com/amp/*' that is not equal to the supplied origin. Origin 'http://www.dominio.com' is therefore not allowed access. Have the server send the header with a valid value, or, if an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
Fetch failed https://www.dominio.com/amp/include/listado.php?__amp_source_origin=http%3A%2F%2Fwww.dominio.com : Failed to fetch
Uncaught Error: Form submission failed:: Fetch failed https://www.dominio.com/amp/include/listado.php?__amp_source_origin=http%3A%2F%2Fwww.dominio.com: Failed to fetch reported at na.f.assert (log.js:295) at xhr-impl.js:164
因此,我需要重定向到另一个页面,该页面从 AMP 页面调用到我正在显示的 php 文件,该文件必须重定向到最终页面。重定向不适用于此代码。
编辑:问题可能出在 CORS 策略上,但我已将此行添加到 htaccess 文件中,但仍然无法正常工作。
<IfModule mod_headers.c>
<FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
编辑 2: 修改 headers:
ob_start();
header("Content-type: application/json");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: https://www.dominio.com/amp/*");
header("AMP-Access-Control-Allow-Source-Origin: https://www.dominio.com/amp/*");
header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin");
错误:
Fetch API cannot load https://www.dominio.com/amp/include/listado.php?__amp_source_origin=http%3A%2F%2Fwww.dominio.com. Redirect from 'https://www.dominio.com/amp/include/listado.php?__amp_source_origin=http%3A%2F%2Fwww.dominio.com' to 'https://www.dominio2.es/m/Alergologo/Alicante-Provincia/' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header has a value 'https://www.dominio.com/amp/*' that is not equal to the supplied origin. Origin 'http://www.dominio.com' is therefore not allowed access. Have the server send the header with a valid value, or, if an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
编辑 3:已解决
添加 headers 以允许 CORS 解决了这个问题。必须将它们添加到所有受影响的域中。
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: https://www.dominio.com/amp/*");
header("AMP-Access-Control-Allow-Source-Origin: https://www.dominio.com/amp/*");
header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin");
REPLACE,
header ("Location: $ulr");
die();
WITH,
header ("Location: $ulr");
?>
<script type="text/javascript">
location.href = '<?php echo $ulr ?>';
</script>
<?php
die();
解决方案添加到 post,编辑 3.
允许CORS的版本headers解决了这个问题。必须将它们添加到所有受影响的域中。
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: https://www.dominio.com/amp/*");
header("AMP-Access-Control-Allow-Source-Origin: https://www.dominio.com/amp/*");
header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin");