当前位置

MediaWiki表单Post提交后不能跳转的问题及解决办法

James Qi 在 2017年9月22日 - 18:21 提交
内容摘要:前几天记录了一篇《AMP表单Post方式提交后不能跳转的问题及解决办法》,找到了原因,修改了Drupal网站,那么MediaWiki网站中也可以使用类似办法来解决,今天花了一些时间来试验,下面把结果记......

  前几天记录了一篇《AMP表单Post方式提交后不能跳转的问题及解决办法》,找到了原因,修改了Drupal网站,那么MediaWiki网站中也可以使用类似办法来解决,今天花了一些时间来试验,下面把结果记录下来:

  • 首先还是需要把普通表单替换为符合AMP-Form的格式,特别是Post到的网址需要是action-xhr,这一步我们先已经实现了,办法是在skins/AMP/AMPTemplate.php中加入过滤替换的函数,这里不详细写了;
  • 这个时候使用表单Post提交功能,例如:编辑Test页面留言,在Web端都正常,而在AMP端,可以编辑保存成功,但缺少了一个跳转环节,让用户误以为没有提交成功;
  • 在includes/OutputPage.php中找到了public function output函数里面有header( 'Location: ' . $redirect )语句明显是与Drupal中一样的跳转功能,修改这个地方,加入是否amp网站的判断,如果是amp网站使用另外的办法来实现跳转:

if ( Hooks::run( "BeforePageRedirect", [ $this, &$redirect, &$code ] ) ) {
  if ( $code == '301' || $code == '303' ) {
    if ( !$config->get( 'DebugRedirects' ) ) {
      $response->statusHeader( $code );
    }
    $this->mLastModified = wfTimestamp( TS_RFC2822 );
  }
  if ( $config->get( 'VaryOnXFP' ) ) {
    $this->addVaryHeader( 'X-Forwarded-Proto' );
  }
  $this->sendCacheControl();
  $response->header( "Content-Type: text/html; charset=utf-8" );
  if ( $config->get( 'DebugRedirects' ) ) {
    $url = htmlspecialchars( $redirect );
    print "<html>\n<head>\n<title>Redirect</title>\n</head>\n<body>\n";
    print "<p>Location: <a href=\"$url\">$url</a></p>\n";
    print "</body>\n</html>\n";
  } else {
    //jamesqi 2017-9-22
    //add start
    $server_name = $_SERVER['SERVER_NAME'];
    if (strpos($server_name,'amp.') !== FALSE) {
      header("AMP-Access-Control-Allow-Source-Origin: https://$server_name");
      header("AMP-Redirect-To: $redirect");
      header("Access-Control-Expose-Headers: AMP-Redirect-To, AMP-Access-Control-Allow-Source-Origin,Access-Control-Allow-Origin");
      print json_encode(array(""));
      die();
    }
    //add end
    $response->header( 'Location: ' . $redirect );
  }
}

  实际使用中很正常,可以现实与Web页面一样的功能和跳转。而百度MIP允许与普通Web页面一样的header
( 'Location: ' . $redirect )语句来跳转,而且我们Wiki站采用了子域名方式做MIP站点,后面跟着的URI是一样的,就无需做任何修改。

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符