Директива Apache DirectoryIndex не работает правильно с Ruby on Rails
У меня есть сайт, где Ruby on Rails работает в корневом каталоге через Phusion Passenger. Какой-то апач Alias
директивы служат для статических каталогов HTML.
Если вы запрашиваете точный URL-адрес файла в одном из статических каталогов, Apache возвращает его, как и ожидалось. Однако есть несколько случаев, когда я не получаю ожидаемого поведения. Рассмотрим псевдоним Alias /functional /path/to/functional
где функциональный каталог содержит index.php и hello.jpg.
- Запрос https://example.com/functional/hello.jpg возвращает файл JPEG, как и ожидалось.
- Запрос на https://example.com/functional/index.php запускает сценарий PHP и печатает полученный HTML-документ, как и ожидалось.
- Запрос на https://example.com/functional/ приводит к 404 в стеке Rails.
- Запрос на 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