2014-12-06 106 views
0

我有一個站點,Ruby on Rails通過Phusion Passenger在根目錄下運行。某些Apache Alias指令提供靜態HTML目錄。Apache DirectoryIndex指令在Ruby on Rails上無法正常工作

如果您從某個靜態目錄請求一個文件的確切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 not loading by default大部分的答案,使指數.php加載,以no爲準。我甚至不需要指定DirectoryIndex index.php,因爲該行已經在conf.d/php.conf中。

有關如何解決這個問題的任何想法,其中Rails提供404s應該在Apache堆棧中的其他地方的URL?

回答

0

你試過更換

<Directory /path/to/functional> 

隨着

<Directory /functional> 
0

我有同樣的問題。工作解決方案只是虛擬主機服務乘客中的RedirectMatch聲明,如下所示:

RedirectMatch ^/path/to/functional(/)?$ /path/to/functional/index.php 
相關問題