2008年2月28日木曜日

(WebDAVのトラブル) 「入力したフォルダは有効ではないようです」といわれてWebフォルダが使えない…再び。原因はApache httpd-2.2.x?

久々、去年の12月にインストールしたWindows XPで、Webフォルダ(WebDAV)を使おうと思ったら、「入力したフォルダは有効ではないようです」と表示されて、Webフォルダが使えませんでした。



あぁ、またか(笑)

WindowsのWebDAVってば、トラブルが多すぎ!!

前回は、こんな感じでした。





とりあえず、前回に書いたのと同じように、以下のMicrosoftのサポート情報を見ながら、問題解決を試みました。

Web フォルダのトラブルシューティング


前回は、2番の、「RegSvr32 oledb32.dll」とかいうおまじないで、Webフォルダが使えるようになったのですが、今回はダメでした。



3番目は、レジストリをいじるというものですが、なんとなく違いそうな雰囲気がしたのでパス。



4番目、Microsoft Data Access Components (MDAC) の最新版をインストールする・・・ってのも、どうも違いそうな雰囲気。このMDAC、データベース関係のやつじゃないんですか? しかも、リンク切れしてるし、検索しても、検索結果のわりと上位に、リンク切れURLが出てくるし・・・このサポート情報、ダメダメだなぁ。



5番目、MSDAIPPって何ですか?たぶん、これも違う。



6番目、Web Folders Repair ユーティリティ (webfldrs.msi) というのがあるそうです。やってみた。・・・ダメだった。



7番目、FrontPageとか言ってて、なんか違う。



8番目、ショートカットの矢印って何のことやら・・・違うだろうな。



9番目、Internet Explorer 4.x 以前・・・違います。



10番目、Internet Explorer 5.x ・・・違うって。



11番目、Active Desktopって・・・なんでしたっけ? (笑)



12番目、Web Server および Server Extensions をインストールします・・・何を言ってるんだ!



13番目、Internet Explorer のプロキシ設定を無効にします・・・proxy serverは使っていません。



14番目、IP アドレスを使用して Web サーバーを開くか、ドメイン/NetBIOS 名を使用して Web サーバーにアクセスします・・・・最初からIPアドレスを使ってましたが。



15番目、Office 2000 SR1a および Office Server Extensions SR1.1 にアップグレード・・・Officeは、インストールしてません



というわけで、全滅。マイクロソフトのサポート情報、何の役にもにたたねー





しょうがないので、Apache httpd 2.2.8のサーバーログを見てみました。
アクセスしにいって、あきらめているところは、こんな感じ。



192.168.0.X - - [26/Feb/2008:21:11:59 +0900] "OPTIONS / HTTP/1.1" 200 - "-" "Microsoft Data Access Internet Publishing Provider Cache Manager"
192.168.0.X - - [26/Feb/2008:21:11:59 +0900] "GET /_vti_inf.html HTTP/1.1" 404 211 "-" "Mozilla/2.0 (compatible; MS FrontPage 4.0)"
192.168.0.X - - [26/Feb/2008:21:11:59 +0900] "POST /_vti_bin/shtml.exe/_vti_rpc HTTP/1.1" 404 225 "-" "MSFrontPage/4.0"
192.168.0.X - - [26/Feb/2008:21:11:59 +0900] "OPTIONS /DAV HTTP/1.1" 301 232 "-" "Microsoft Data Access Internet Publishing Provider DAV 1.1"



/_vti_inf.html とか、/_vti_bin/shtml.exe/_vti_rpc とか、変なところにリクエスト出してくるんですけど、Windowsってわけわからん挙動しますね・・・相手のサーバが誰であろうと、Microsoft謹製のサーバのつもりで、勝手し放題ってかんじです。



問題なのは、一番最後の行でして、"OPTIONS /DAV HTTP/1.1"に対して、HTTPのステータスコードが301になってます。



これって、こういうことですね。



HTTP/1.1 301 Moved Permanently
Date: Tue, 26 Feb 2008 13:04:22 GMT
Server: Apache/2.2.8 (FreeBSD) mod_ssl/2.2.8 OpenSSL/0.9.8g DAV/2 PHP/5.2.5 with Suhosin-Patch
Location: http://192.168.0.X/DAV/
Content-Length: XXX
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://192.168.0.X/DAV/">here</a>.</p>
</body></html>
Connection closed by foreign host.



ようするに、「/DAV/」のように、末尾にスラッシュ(/)をつけてリクエストしなくちゃいけないのに、Windowsは、「/」をつけずにリクエストしてきていて、しかも、サーバからは丁寧にリダイレクトをうながされているのに、Windowsはそのリダイレクトを理解できないまま、勝手に自滅したあげく、「入力したフォルダは有効ではないようです」とウソを言ってるわけです。





解決方法



実は、Apache httpdでも、このWindowsのWebDAVクライアントのおかしな挙動にあわせて、対策機能があるのでした。



なぜか、うちのapache httpd-2.2.xでは、この対策が無効になっていて、今回のトラブルとなったようです。



apache httpd-2.2にしたときに、設定ファイルがけっこう変わったのですが、その設定ファイルの修正が不十分だったようです。



でも、昔から使ってた、ほかのWindows XPパソコンでは、Webフォルダにアクセスできてたような気がするんですが・・・



問題の箇所は、httpd.confの以下の部分でして、コメントアウトされていて、httpd-dav.confがインクルードされていませんでした



# Distributed authoring and versioning (WebDAV)
Include etc/apache22/extra/httpd-dav.conf



httpd-dav.confの中には、こんなのがあります。



#
# The following directives disable redirects on non-GET requests for
# a directory that does not include the trailing slash.  This fixes a
# problem with several clients that do not appropriately handle
# redirects for folders with DAV methods.
#
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully


Windows XPのWebDAVクライアント(Microsoft Data Access Internet Publishing Provider)からアクセスされたときは、「redirect-carefully」っていう特別な動作になるみたいですね。



たぶん、末尾の「/」がなくても、301 Moved Permanentlyを返さなくて、大目に見てやるようになるのではないかと。



0 件のコメント:

コメントを投稿