0

我有一个站点,Ruby on Rails 通过 Phusion Passenger 在根目录中运行。一些 ApacheAlias指令提供静态 HTML 目录。

如果您从其中一个静态目录请求文件的确切 URL,Apache 会按预期返回它。但是,在某些情况下,我没有得到预期的行为。考虑别名Alias /functional /path/to/functional,其中功能目录包含index.phphello.jpg

  1. 对https://example.com/functional/hello.jpg的请求按预期返回 JPEG 文件。
  2. 对https://example.com/functional/index.php的请求会运行 PHP 脚本并按预期打印生成的 HTML 文档。
  3. 对https://example.com/functional/的请求会导致Rails 堆栈中出现 404 。
  4. 对https://example.com/functional的请求(没有尾部斜杠)也会导致 Rails 堆栈中出现 404。理想情况下,此 URL 应返回 301,将用户重定向到http://example.com/functional/

如果我将index.html文件添加到功能目录中(除了已经存在的index.php之外),路径 #3 和 #4 会按预期返回该文件。

这是我的乘客 Apache 配置文件中的相关部分:

LoadModule passenger_module /path/to/mod_passenger.so
LoadModule ssl_module modules/mod_ssl.so

<IfModule mod_passenger.c>
    # ... passenger setup stuff omitted ...

    Listen 443
    <VirtualHost *:443>
        ServerName ...
        DocumentRoot /path/to/rails/public
        PassengerRuby /path/to/ruby
        <Directory /path/to/rails/public>
            Allow from all
            Options -MultiViews
        </Directory>

        #  ... ssl setup omitted ...

    </VirtualHost>
</IfModule>

对于静态目录:

Alias /functional /path/to/functional/
Alias /phpMyAdmin /path/to/phpMyAdmin/
# ... other aliases omitted ...

<Directory /path/to/functional>
    DirectoryIndex index.php
    AllowOverride all
</Directory>

我已经尝试了 index.php 中的大多数答案,默认情况下不加载以使index.php加载,但没有占上风。我什至不需要指定DirectoryIndex index.php,因为该行已经在conf.d/php.conf中。

关于如何解决这个问题的任何想法,Rails 在应该在 Apache 堆栈中的其他地方提供 404 的 URL 上?

4

2 回答 2

0

您是否尝试过更换

<Directory /path/to/functional>

<Directory /functional>
于 2014-12-08T10:00:53.403 回答
0

我有同样的问题。有效的解决方案只是RedirectMatch虚拟主机中为乘客服务的声明,如下所示:

RedirectMatch  ^/path/to/functional(/)?$  /path/to/functional/index.php
于 2017-07-03T08:40:58.770 回答