Apache DirectoryIndex指令与Ruby on Rails无法正常工作

时间:2014-12-06 20:20:40

标签: apache passenger mod-alias directoryindex

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

如果您从其中一个静态目录请求文件的确切URL,Apache会按预期返回它。但是,有一些情况我没有得到预期的行为。考虑别名Alias /functional /path/to/functional,其中功能目录包含 index.php hello.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。理想情况下,此网址应返回301将用户重定向到http://example.com/functional/
  5. 如果我将 index.html 文件添加到功能目录中(除了已经存在的 index.php 之外),路径#3和#4按预期返回该文件。

    以下是Passenger的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 not loading by default中的大部分答案,以使 index.php 加载,但不会占上风。我甚至不需要指定DirectoryIndex index.php,因为该行已经在 conf.d / php.conf 中。

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

2 个答案:

答案 0 :(得分:0)

您是否尝试过更换

<Directory /path/to/functional>

<Directory /functional>

答案 1 :(得分:0)

我遇到了同样的问题。工作解决方案只是虚拟主机服务乘客的RedirectMatch语句,如下所示:

RedirectMatch  ^/path/to/functional(/)?$  /path/to/functional/index.php