0

Phusion Passenger を介してルート ディレクトリで Ruby on Rails が実行されているサイトがあります。一部の ApacheAliasディレクティブは、静的 HTML ディレクトリを提供します。

静的ディレクトリの 1 つからファイルの正確な URL を要求すると、Apache は期待どおりにそれを返します。ただし、期待どおりの動作が得られない場合がいくつかあります。機能ディレクトリにindex.phphello.jpgAlias /functional /path/to/functionalが含まれるエイリアスについて考えてみます。

  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 は、ユーザーをhttp://example.com/functional/にリダイレクトする 301 を返す必要があります。

(すでにあるindex.phpに加えて) index.htmlファイルを機能ディレクトリに追加すると、パス #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 がデフォルトでロードされないという答えのほとんどを試しましたが、優先れませんでした。その行はすでにconf.d/php.confにあるため、指定する必要さえありません。DirectoryIndex index.php

Rails が URL に 404 を与えているこの問題を解決する方法についてのアイデアはありますか?

4

2 に答える 2

0

交換してみましたか

<Directory /path/to/functional>

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

私も同じ問題を抱えていました。RedirectMatch実用的な解決策は、次のような virtualhost サービングパッセンジャーの単なるステートメントでした。

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