我已经在 Ubuntu 11.10 上为 Apache 安装了 mod_rails (phusion Passenger)。Ruby 和 Rails 运行良好,mod_rails 也运行良好。
我在 dev.localhost 上设置了一个网站,这是我的 ruby 应用程序。该应用程序名为 my_project,位于 var/www/my_project
我的虚拟主机成功指向了我的 ruby 应用程序的“公共”目录,它似乎可以正常工作。如果我访问 dev.localhost - 我的 ruby 应用程序运行正常,没有任何抱怨。但是,如果我访问 localhost/my_project,则会显示我的整个 ruby 应用程序,包括 Gemfile、控制器、所有目录 - 所有内容。它显示目录的内容。
我的 Rails 应用程序的虚拟主机文件:
<VirtualLHost *:80>
RailsEnv development
ServerName dev.localhost
DocumentRoot /var/www/my_project/public
</VirtualHost>
这是为什么?我搞不懂。我试过 .htaccess 文件,所有方法,但这些显然也反映在 dev.localhost 上。
我如何才能阻止人们看到 localhost/my_project 上的 ruby 应用程序文件?它不会在 dev.localhost 上显示它,而是 100% 显示网站。
我在这里遗漏了什么?
答案1
您已将基于名称的 VirtualHost(通过使用ServerName dev.localhost
)附加到所有接口上的端口 80,但尚未设置默认 VirtualHost,因此它使用主 DocumentRoot 配置(可能在/etc/apache2/conf/apache2.conf
)。两个选项:
- 替换并删除
*:80
选项,意味着此 VirtualHost 将处理端口 80 上的所有连接,而不管提供的标头是什么。_default_:80
ServerName
Host:
- 添加另一个
sites-enabled
文件,_default_:80
该文件包含指向DocumentRoot
包含页面的 VirtualHost,该页面告知用户此主机名上没有配置站点。如果您计划部署多个基于名称的 VirtualHost,这种方法具有前瞻性。
答案2
您的 apache2 配置中似乎有一个+Indexes
设置。将此块添加到您的 VirtualHost 块(或添加到您的 httpd.conf)应该可以解决此问题。
<Directory "/var/www/my_project">
Options -Indexes
</Directory>
这将覆盖+Indexes
在 httpd 配置中某处设置的选项,以使所有 /var/www 内容可作为索引提供。
另外,不要考虑使用万能虚拟主机<VirtualLHost dev.localhost:80>
。