Phusion Passenger を介してルート ディレクトリで Ruby on Rails が実行されているサイトがあります。一部の ApacheAlias
ディレクティブは、静的 HTML ディレクトリを提供します。
静的ディレクトリの 1 つからファイルの正確な URL を要求すると、Apache は期待どおりにそれを返します。ただし、期待どおりの動作が得られない場合がいくつかあります。機能ディレクトリにindex.phpとhello.jpgAlias /functional /path/to/functional
が含まれるエイリアスについて考えてみます。
- https://example.com/functional/hello.jpgをリクエストすると、期待どおりに JPEG ファイルが返されます。
- https://example.com/functional/index.phpへのリクエストにより、PHP スクリプトが実行され、期待どおりに結果の HTML ドキュメントが出力されます。
- https://example.com/functional/へのリクエストは、Rails スタックで404になります。
- 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 を与えているこの問題を解決する方法についてのアイデアはありますか?