レンタルサーバのheteml にownCloud 7.0.4 を導入する簡単なお仕事.ssh も使えるし〜と思ってさくっと導入してWeb でのテストまでして引渡したのですがユーザからownCloud のクライアントで接続できないとのこと.
ログファイルを出力しつつ試してみると確かに繋がりません.
% owncloud —confdir ./ —logfile ./log —logflush —logwindow
- —confdir 設定ファイルのディレクトリ指定
- —logfile ログファイル指定
- —logflush ログのリアルタイム出力
- —logwindow ログ出力ウィンドウ表示
WebDav でもうまく行かない.
怪しそうな以下のエラーメッセージで検索するとそれらしいものを発見.
No basic authentication headers were found
コメントを参考に以下の2ファイルを修正.
- .htaccess
- lib/base.php
$ diff -u .htaccess.org .htaccess
--- .htaccess.org 2015-02-19 18:41:36.000000000 +0900
+++ .htaccess 2015-03-03 18:09:27.000000000 +0900
@@-17,6 +17,9 @@
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
+RewriteCond %{HTTP:Authorization} ^Basic.*
+RewriteRule ^(.*) $1?Authorization=%{HTTP:Authorization} [QSA,C]
+RequestHeader unset Authorization
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule ^\.well-known/host-meta /public.php?service=host-meta [QSA,L]
RewriteRule ^\.well-known/host-meta\.json /public.php?service=host-meta-json [QSA,L]
@@-40,4 +43,4 @@
</IfModule>
$ diff -u lib/base.php.org lib/base.php
--- lib/base.php.org 2014-12-09 03:34:15.000000000 +0900
+++ lib/base.php 2015-03-02 20:58:04.000000000 +0900
@@-805,6 +805,12 @@
protected static function handleAuthHeaders() {
//copy http auth headers for apache+php-fcgid work around
+ if(isset($_GET['Authorization']) && preg_match('/Basic\s+(.*)$/i', $_GET['Authorization'], $matches))
+ {
+ list($name, $password) = explode(':', base64_decode($matches[1]));
+ $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
+ $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
+ }
if (isset($_SERVER['HTTP_XAUTHORIZATION']) && !isset($_SERVER['HTTP_AUTHORIZATION'])) {
$_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['HTTP_XAUTHORIZATION'];
}
```language
これでどうにか繋がるようになりました.
同じような環境はそこそこありそうですけどね….