Вот мое решение.
Мы оставляем нашу вики позади .htpasswd, а скрипт php на поддомене (external.wiki.mydomain.co.uk) выбирает страницу и обслуживает ее , если она соответствует массиву разрешенных страниц,
Он также удаляет боковые панели и нижний колонтитул и т. Д. Это, вероятно, зависит от стиля, который использует ваша вики, функция 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);
}
Вы можете расширить это, добавив логин в начале, чтобы скрипт мог выбирать разные подмножества страниц для разных пользователей.