前幾天記錄了一篇《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 $url = htmlspecialchars( $redirect );//同事發現首頁跳轉有問題,增加此行 $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"); header("location: $url");//同事發現首頁跳轉有問題,增加此行 print json_encode(array("")); die(); } //add end $response->header( 'Location: ' . $redirect ); } }
實際使用中很正常,可以現實與Web頁面一樣的功能和跳轉。而百度MIP允許與普通Web頁面一樣的header
( 'Location: ' . $redirect )語句來跳轉,而且我們Wiki站采用了子域名方式做MIP站點,後面跟着的URI是一樣的,就無需做任何修改。
评论