我正在通过用Symfony替换部分内容来翻新遗留的Web应用程序。
我的文件夹结构:
/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/开头的路径,即。包括尾部斜杠。
答案 0 :(得分:1)
修改强>
这是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
指令,因为您已经指向带有/ ajax URL路径的symfony / web文件夹。
答案 1 :(得分:0)
根据 http://httpd.apache.org/docs/2.4/mod/mod_alias.html#alias
&#34;仅匹配完整的路径段&#34;
这意味着我不能使用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>