文档根目录外的文件夹中的 symfony app_dev.php

symfony app_dev.php in folder outside document root

我正在通过用 Symfony 替换它的一部分来翻新旧版网络应用程序。

我的文件夹结构:

/symfony            <---symfony install
/trunk              <---document root

文档根目录是 trunk/,因此对旧版应用程序的更改很小。

在我的虚拟主机配置中我有:

<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/ 开头的路径,即。包括尾部斜杠。

编辑

这是 apache 文档的 link 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 指令,因为您已经使用 /ajax URL 路径指向 symfony/web 文件夹.

根据 http://httpd.apache.org/docs/2.4/mod/mod_alias.html#alias

"Only complete path segments are matched"

这意味着我无法使用 Alias 重写 app_dev.php 文件。

需要使用别名匹配。而且它似乎不支持相对路径,至少在 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/"

</VirtualHost>