Директива Apache DirectoryIndex не работает правильно с Ruby on Rails

У меня есть сайт, где Ruby on Rails работает в корневом каталоге через Phusion Passenger. Какой-то апач 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/ приводит к 404 в стеке Rails.
  4. Запрос на https://example.com/functional (без завершающего слеша) также приводит к 404 в стеке Rails. В идеале этот 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 дает 404s на URL-адреса, которые должны быть в другом месте в стеке Apache?

2 ответа

Вы пробовали заменить

<Directory /path/to/functional>

С

<Directory /functional>

У меня такая же проблема. Рабочее решение было просто RedirectMatch Заявление в виртуальном хосте, обслуживающем пассажира, следующее:

RedirectMatch  ^/path/to/functional(/)?$  /path/to/functional/index.php
Другие вопросы по тегам