• 締切済み

ApacheでVirtualHostを使うとDirectoryIndexが上手くいかない

CentOS4.4で、Apache2.0を使っています。 バーチャルホストを使っていて、ドメインによって表示を分けるのはうまくいっています。 以下の抜粋のように設定しています。 http://foofoo.com/cgi-bin/hoge/hage/wiki.cgi http://foofoo.com/hoge/hage/wiki.cgi は問題なく実行できています。 <VirtualHost *:80> ServerAdmin xxxx@yyy.com DocumentRoot /var/www/html ServerName foofoo.com ScriptAlias /hoge/hage/ "/var/www/cgi-bin/hoge/hage/" </VirtualHost> 以下のように設定を変えても、 http://foofoo.com/cgi-bin/hoge/hage/ http://foofoo.com/hoge/hage/ へアクセスしても You don't have permission to access /tech/wiki/ on this server. となってしまいます。 <VirtualHost *:80> ServerAdmin xxxx@yyy.com DocumentRoot /var/www/html ServerName foofoo.com ScriptAlias /hoge/hage/ "/var/www/cgi-bin/hoge/hage/" <Location /hoge/hage/> DirectoryIndex wiki.cgi </Location> </VirtualHost> バーチャルホストを使う場合のDirectoryIndexの設定方法を教えてください。 よろしくお願いいたします。

  • 10940
  • お礼率87% (84/96)

みんなの回答

  • hito-koto
  • ベストアンサー率53% (14/26)
回答No.2

そのケースでしたら、次のようにします。 #まず、mod_rewriteを有効にしておいてください。 ScriptAliasの前に、 RewriteEngine on RewriteRule ^/hoge/hoge/$ /hoge/hoge/wiki.cgi RewriteRule ^/cgi-bin/hoge/hoge/$ /cgi-bin/hoge/hoge/wiki.cgi と追加してみてください。(DirectoryIndexの行は削除して構いません) cgiにDirectoryIndexは効かないことが理由だと思います。

10940
質問者

お礼

回答ありがとうございます。お礼が遅くなり申しわけありません。 RewriteEngineの使い方が悪いのか、うまくいきませんできた。 別の方法でうまくいきました。 <VirtualHost *:80> .. <Directory /var/​www/hoge/hage/> AllowOverride All </Directory> </VirtualHost> として、 /var/​www/hoge/hage/.htacces を以下のようにしました。 ptions +ExecCGI AddHandler cgi-script .cgi DirectoryIndex hiki.cgi <Files "hikiconf.rb"> deny from all </Files> ここではDirectoryIndexでうまくいっているので、httpd.confのほうでもうまくいくと思うのですが...。 とりあえずは自己解決です。継続して勉強します。

  • hito-koto
  • ベストアンサー率53% (14/26)
回答No.1

いうまでもないことですが、restart/reloadはなさっていますよね。。。 その時、およびアクセス時にerror.logになにか出力されていませんか…?

10940
質問者

お礼

error.logにメッセージがありました。 attempt to invoke directory as script: /var/www/cgi-bin/hoge/hage/ 少しググッてみると根がふかそうです。 解決された方いますか?

関連するQ&A

  • Apache VirtualHost でワイルドカード(?)設定

    Apache2.2.3を利用しています。 virtualhost.confに50程度のサブドメインを、 下記のように設定をしています。 *************************************************** <VirtualHost *:80>   ServerName suzuki.example.com   DocumentRoot /var/www/html/suzuki/ </VirtualHost> <VirtualHost *:80>   ServerName sato.example.com   DocumentRoot /var/www/html/sato/ </VirtualHost> <VirtualHost *:80>   ServerName yamada.example.com   DocumentRoot /var/www/html/yamada/ </VirtualHost> ・ ・ ・ *************************************************** つまり *************************************************** <VirtualHost *:80>   ServerName ▲▲▲.example.com   DocumentRoot /var/www/html/▲▲▲/ </VirtualHost> *************************************************** のようなルールになっているのですが、 これをワイルドカード使ってできないでしょうか? 宜しくお願いします!

  • apacheのvirtualhostについて

    Apache/1.3.22のname virtual hostについておたずねします。 httpd.confの記述で NameVirtualHost 219.***.***.*** <VirtualHost 219.***.***.*** ServerName www.********.co.jp DocumentRoot /home/web/docs ScriptAlias /cgi-bin/ /home/web/cgi-bin/ ErrorLog /home/web/logs/error_log CustomLog /home/web/logs/access_log combined </VirtualHost <VirtualHost 219.***.***.*** ServerName test.********.co.jp DocumentRoot /home/web/test ScriptAlias /cgi-bin/ /home/web/test-cgi-bin/ ErrorLog /home/web/logs/test-error_log CustomLog /home/web/logs/test-access_log combined </VirtualHost としているのですがVirtualHostが反映されません。 また、LAN内のサーバーですのでnamed.confはviewを使用し、zoneファイルは2通り用意しており外部からも内部からも正常に正引きできます。 どのような原因が考えられるでしょうか? また、対処法はどのようにすればよいのでしょうか? ご教授いただきますようお願いいたします。

  • apache VirtualHostが実行されない

    Apache設定初心者です。 httpd.conf で <VirtualHost> 内の DocumentRoot が表示されなくて困っています。 https://111.112.113.114 を実行すると DocumentRoot が /home/httpd/hoge/err/httpdocs となってしまいます(VirtualHost内の DocumentRoot が実行されない) よろしくお願いします。 【記述内容】 NameVirtualHost 111.112.113.114:80 NameVirtualHost 111.112.113.114:443 DocumentRoot /home/httpd/hoge/err/httpdocs <IfModule mod_ssl.c> <VirtualHost 111.112.113.114:443> ServerName hoge.co.jp:443 ServerAlias www.hoge.co.jp UseCanonicalName Off SuexecUserGroup use01grp01 DocumentRoot /home/httpd/hoge/httpdocs ErrorLog /usr/hoge/logs/error ScriptAlias /hoge-bin/ /usr/hoge-bin/ Alias /hoge1 /usr/hoge1/ Alias /hoge2 /use/hoge2 SSLEngine on SSLVerifyClient none SSLCertificateFile /usr/hoge/ctr/hoge.ctr </VirtualHost> </IfModule>

  • ApacheのVirtualHostを設定したい

    ApacheのVirtualHostを設定したい http://xxxxx.jp http://yyy.xxxxx.jp:5041 http://zzz.xxxxx.jp:5042 という3種類の接続方法をしたいが為に、VirtualHostを設定していますが、うまく設定できずに 困っています。 Listen 80 Listen 5041 Listen 5042 NameVirtualHost 111.222.333.444:80 NameVirtualHost 111.222.333.444:5041 NameVirtualHost 111.222.333.444:5042 <VirtualHost 111.222.333.444:80> ServerName xxxxx.jp DocumentRoot /test </VirtualHost> <VirtualHost 111.222.333.444:5041> ServerName yyy.xxxxx.jp DocumentRoot /test2 </VirtualHost> <VirtualHost 111.222.333.444:5042> ServerName zzz.xxxxx.jp DocumentRoot /test3 </VirtualHost> 今現状、こんな設定なのですが、これだと http://yyy.xxxxx.jp http://zzz.xxxxx.jp とアクセスすると、 http://xxxxx.jp と同じ結果が表示されてしまいます。 サブドメインが付与されているアドレスは、あくまでもポート指定が 5041、5042と正しく指定された場合のみアクセスされてほしいです。 (そうじゃないときは何らかのHTTPエラーが出ればいいです) どう設定すれば実現できるでしょうか?

  • アパッチのマルチドメインとcgi-binに関して

    にわかにアパッチを触っている者です。 よく分かっていないのですが教えて下さい、 アパッチでマルチドメインをする場合のサンプルとして、下記のようなものをよく見かけます。 <VirtualHost *:80> ServerName www.server1.com ServerAlias server1.com DocumentRoot /var/www/html1 </VirtualHost> <VirtualHost *:80> ServerName www.server2.com ServerAlias server2.com DocumentRoot /var/www/html2 </VirtualHost> これを踏まえて質問です。 ドキュメントルートのデフォルトが /var/www/html だとすると、cgi-binは、 /var/www/cgi-bin になっていますが、 ここにVirtualHostを追加したとしたら、 / ┗var/  ┗www/   ┣cgi-bin   ┣html ← 元のヤツ   ┣html1 ← VirtualHost1   ┗html2 ← VirtualHost2 こんな感じになりますよね? cgi-binって全サイト共通で作るべきものなのですか? / ┗var/  ┣www/  ┃┣cgi-bin  ┃┗html ← 元のヤツ  ┣www1/  ┃┣cgi-bin  ┃┗html ← VirtualHost1  ┗www2/   ┣cgi-bin   ┗html ← VirtualHost2 こんな風に作れと紹介されているのを見た事がありませんが。

  • apacheのVirtualHostの記述について

    サブドメイン *.hoge.com へアクセスされた際、 ドキュメントルート /var/www/subDomains/*/ を参照させたいので、httpd.confを以下のように設定しました。 <VirtualHost *> ServerAlias *.hoge.com VirtualDocumentRoot "/var/www/subDomains/%1/" ・・・  </VirtualHost> これはうまく動作するのですが、上記サブドメイン設定とは別に メインドメイン(hoge.com または www.hoge.com)へアクセスされた場合のみ ドキュメントルート /var/www/main/ を参照させたいのです。 なので、上記記述とは別に、 <VirtualHost *> DocumentRoot "/var/www/main/" ServerName www.hoge.com ・・・  </VirtualHost> を追加したのですが、このメインドメイン用記述は無視されてしまいます。 ※メインドメインへアクセスしても、サブドメイン用のVirtualDocumentRoot である /var/www/subDomains/www/ を参照してしまいます。 こうなってしまう原因は、サブドメイン用の記述である ServerAlias *.hoge.com の指定で、「www.hoge.com」が対象となっているからだと思いますが、 正規表現で「www.hoge.com」を除外する方法や、 その他解決策がありましたらご教授よろしくお願いします。 apacheのバージョンは2.2.15です。 ※ちなみに、正規表現による除外は「ServerAlias (?!www)*.hoge.com」を試してみましたがダメでした。 書き方が悪いのかもしれません。。

  • Apacheのバーチャルホストの設定について

    Apacheでvirtualhostの設定をしているのですがうまくいきません。 ホスト:ドキュメントルート v1.hoge.com:/var/www/v1/ v2.hoge.com:/var/www/v2/ v3.hoge.com:/var/www/v3/ です。 設定は <VirtualHost *:80> Servername v1.hoge.com:80 DocumentRoot "/var/www/v1" <Directory "/var/www/v1/"> Options Includes FollowSymLinks ExecCGI </Directory> </VirtualHost> <VirtualHost *:80> Servername v2.hoge.com:80 DocumentRoot "/var/www/v2" <Directory "/var/www/v2/"> Options Includes ExecCGI </Directory> </VirtualHost> <VirtualHost *:80> Servername v3.hoge.com:80 DocumentRoot "/var/www/v3" <Directory "/var/www/v3/"> Options Includes FollowSymLinks </Directory> </VirtualHost> で、三つともv*の部分とOptionsがちがうだけになっています。 http://v1.hoge.com/では普通にアクセスできるのですが、http://v2.hoge.com/とhttp://v3.hoge.com/でアクセスしようとするとなぜか/var/www/v1/foo/index.cgiが表示されます。ただしURLは変わらすhttp://v2.hoge.comのままです。ただしhttp://v2.hoge.com/index.htmlと入力するときちんと表示されます。DirectoryIndexでindex.htmlを指定しても無駄でした。 /v1には/v1/index.htmlと/v1/foo/index.cgi、/v2には/v2/index.html、/v3には/v3/index.htmlだけが入っています。 /etc/hostsとか/etc/hosts.confとか/etc/nsswitch,confなども試しました。DNSは登録してからすでに一か月ほど経過していますのでとっくに浸透していると思いますが、v1を設定した時期とv2,v3を設定した時期は半年ぐらい空いてます。 同様の構成を別のサーバーでも試しましたが、症状は同じでした。まあ両方自分で同じように建てたので同じように間違っているだけかもしれませんが。。。 気持ち悪いのは次の四点です。 1.ドキュメントルートが別のホストになる 2.別のホストのドキュメントルートどころかその下にあるCGIが実行される 3.DirectoryIndexが効かない 4.アクセスがやけに遅い(v1とかは普通の速度) エラーログには何もなし、アクセスログにはhttp://v2.hoge.comにアクセスした記録しかないです。 httpd.confではNameVirtualHost *:80と記述し、DocumentRootはコメントアウトしています。 CentOS 6.5 Apache 2.2.15 です これくらいの情報で十分でしょうか?足りなければお叱りください。 よろしくお願いします。

  • apache,ssl,virtualhost

    VPS上にいくつかのサブドメインでバーチャルホスト(名前ベース)を運用しています。 実現したいのは以下の設定です。  ブラウザに入力されたURL => リダイレクト先 (1)http://hoge.net => https://hoge.net (2)http://www.hoge.net => https://hoge.net (3)https://www.hoge.net => https://hoge.net SSL証明書が有効なのは、『hoge.net』と『hige.hoge.net』です。『www.hoge.net』は有効ではありません。 wwwについては、あっても無くてもアクセス可能とし、あった場合はリダイレクト(いわゆる無しで統一)したいので、設定してあります。 (1)と(2)は問題ないのですが、ブラウザに(3)を入力するとセキュリティの警告エラーが出てしまいます。 その警告を無視して進むとリダイレクトされて、正常に表示されます。 SSL証明書の追加取得以外で、この警告を回避してリダイレクトする方法を教えていただきたいです。 環境:apache2.2 設定内容:httpd.confではなくvhost.confファイルに下記を記述。(見易いように、先頭空白を全角に変更してあります。) <Directory /var/www/html/*/public_html>   Options FollowSymLinks   AllowOverride All   Order allow,deny   Allow from all </Directory> <VirtualHost *:80>   ServerName hoge.net   Redirect permanent / https://hoge.net </VirtualHost> <VirtualHost *:443>   ServerName hoge.net   DocumentRoot /var/www/html/hoge/public_html   SSLEngine on   SSLCertificateFile ++++++++++++++++   SSLCertificateKeyFile ++++++++++++++++ </VirtualHost> <VirtualHost *:80 *:443>   ServerName hige.hoge.net   DocumentRoot /var/www/html/hige/public_html   RewriteEngine on   RewriteCond %{HTTPS} off   RewriteRule . https://hige.hoge.net%{REQUEST_URI} [R=301,L]   SSLEngine on   SSLCertificateFile ++++++++++++++++   SSLCertificateKeyFile ++++++++++++++++ </VirtualHost> よろしくお願いいたします。

  • VirtualHostの設定

    名前ベースのVirtualHostの設定を試してるのですが、 Permission denied: file permissions deny server accessとなり アクセスできません。wwwはアクセスできます。 サイトでいろいろ調べているのですが、解決できませんでした。 パーミッションも777に設定しています。httpd.confの設定を載せます。pperというユーザーを追加しました。 *ホストとドメインは仮名 NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot /var/www/html ServerName www.pani.mydns.jp ErrorLog logs/www.pani.mydns.jp-error_log CustomLog logs/www.pani.mydns.jp-access_log common </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot /home/pper/html ServerName test.pani.mydns.jp ErrorLog logs/test.pani.mydns.jp-error_log CustomLog logs/test.pani.mydns.jp-access_log common </VirtualHost>

  • apache wwwなしからwwwありにアクセス

    先日から触り始めた初心者で、右も左もわからずここに辿り着きました。。。 Red Hat Apache2 で構築しています。 www.AAA.co.jp でアクセスすると http://www.japanese.AAA.comが表示します。 www.AAA.co.kr でアクセスすると http://www.korean.AAA.comが表示します。 AAA.co.jp でアクセスすると http://www.japanese.AAA.comが表示します。 . ここで、AAA.co.kr でアクセスした人を http://www.korean.AAA.comを表示/転送させたいのです。 httpd.confに下記を追加したのですが、http://www.japanese.AAA.comが表示されちゃいます... #www.AAA.co.kr <Virtualhost 192.168.1.100> DocumentRoot /va/www/html/korea ServerAdmin root@localhost servername www.AAA.co.kr DirectoryIndex index.html index.html index.htm.index.shtml </Virtualhost 192.168.1.100> #AAA.co.kr <Virtualhost 192.168.1.100> DocumentRoot /va/www/html/korea ServerAdmin root@localhost servername AAA.co.kr DirectoryIndex index.html index.html index.htm.index.shtml </Virtualhost 192.168.1.100> 宜しくお願いします。