これが私の解決策です。
私たちはウィキを .htpasswd の背後に保持し、サブドメイン (external.wiki.mydomain.co.uk) の php スクリプトがページをフェッチし、許可されたページの配列に一致する場合にそれを提供します。
また、サイド バーやフッターなども取り除きます。これはおそらく、ウィキが使用しているスタイルに依存しており、strip_content() 関数を微調整する必要がある場合があります。
$allowed = array( "Architecture",
"Database_Design",
"Authentication",
"Branding");
//put your own .htpasswd credentials in here
$username = "USERNAME";
$password = "P@ssw)rd";
$url = "http://internal.wiki.mydomain.co.uk";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
//I have not mod-rewritten the index.php out of the url, hence the 2 lines below...
$page = str_replace("/index.php/", "",$_SERVER['PHP_SELF']);
$page = $page == '/index.php' ? "Home" : $page;
$links = "<div><a href = '/' >Home</a>";
$links .= isset($_SERVER['HTTP_REFERER']) ? ' - <a href = "' . $_SERVER['HTTP_REFERER'] . '" >Back</a>' : '';
$links .= "</div>";
if (!in_array($page, $allowed)) {
$out = "<div>Access denied to " . $page . '</div>' . $links;
} else {
curl_setopt($ch, CURLOPT_URL, $url . "/index.php/" . $page);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
$out = $links . '<br />' . strip_content($output);
}
curl_close($ch);
echo $out;
/**
* Strip out unwanted bits of the page, such as side bar and header and footer.
* @param string $html The raw html
* @return string
*/
function strip_content($html)
{
$patterns = array( '!<span class="editsection">.*?<\/span>!is',
'@<!-- footer -->.*?<!-- /footer -->@is',
'@<!-- panel -->.*?<!-- /panel -->@is',
'@<!-- header -->.*?<!-- /header -->@is'
);
return preg_replace($patterns, "", $html);
}
これを拡張するには、最初にログインを追加して、スクリプトがさまざまなユーザーに対してさまざまなページのサブセットを選択できるようにします。