Я обновляю устаревшее веб-приложение, заменяя его части Symfony.
Моя структура папок:
/symfony <---symfony install
/trunk <---document root
Корень документа - это соединительная линия /, так что изменения в устаревшем приложении минимальны.
В моей конфигурации виртуального хоста я:
<VirtualHost *:80>
ServerName webapp.example.com
DocumentRoot /path/to/project/trunk
Alias /ajax ../symfony/web
Alias /app_dev.php/ ../symfony/web/app_dev.php
</VirtualHost>
Запрос на работу webapp.example.com/ajax
Однако запрос к webapp.example.com/app_dev.php/ajax приводит к ошибке 404.
Примечание. Мне нужно переписать только пути, начинающиеся с /app_dev.php/, т.е. включают конечную косую черту.
Согласно http://httpd.apache.org/docs/2.4/mod/mod_alias.html#alias
"Подбираются только полные сегменты пути"
что означает, что я не могу использовать псевдоним для перезаписи файла app_dev.php.
Вместо этого нужно использовать Aliasmatch. Также он не поддерживает относительные пути, по крайней мере, не на Apache 2.4.10, но я не мог найти документацию об этом.
<VirtualHost *:80>
ServerName webapp.example.com
DocumentRoot /path/to/project/trunk
Alias "/ajax" "../symfony/web"
AliasMatch "^/app_dev.php/(.*)" "/path/to/project/symfony/web/app_dev.php/$1"
</VirtualHost>
РЕДАКТИРОВАТЬ
Это ссылка на документацию apache http://httpd.apache.org/docs/2.4/mod/mod_alias.html#alias
Проблема заключается в завершении косой черты в конце второй директивы Alias
Попробуйте изменить это:
Alias /app_dev.php/ ../symfony/web/app_dev.php
к этому:
Alias "/app_dev.php" "../symfony/web/app_dev.php"
Из документов:
Note that if you include a trailing / on the URL-path then the server will require a trailing / in order to expand the alias. That is, if you use
Alias "/icons/" "/usr/local/apache/icons/"
then the URL /icons will not be aliased, as it lacks that trailing /. Likewise, if you omit the slash on the URL-path then you must also omit it from the file-path.
Если это не сработает, попробуйте удалить вторую директиву Alias
, поскольку вы уже указываете на папку symfony/web с URL-адресом /ajax URL.