抱歉,这是新手 apache 的问题。我想知道是否可以设置以下非常规 apache 虚拟主机(用于 Django 应用程序):
-- 如果文件存在于 DocumentRoot (/var/www) 中,则将显示该文件。因此,如果 /var/www/foo.html 存在,则可以在 www.example.com/foo.html 中看到它。
-- 如果文件不存在,则通过虚拟主机提供服务。我使用 mod_wsgi 和指向 Django 应用的 WSGIScriptAlias 指令。因此,如果没有 /var/www/bar.html,www.example.com/bar.html 将被传递给 Django 应用,这可能是也可能不是 404 错误。
一种选择是为每个单独的文件/目录创建一个别名,但人们希望能够在不添加别名的情况下发布文件,并且我们希望出于遗留原因保留上述 URL 结构。
简化的虚拟主机是:
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www
WSGIScriptAlias / /path/to/django.wsgi
<Directory /path/to/app>
Order allow,deny
Allow from all
</Directory>
Alias /hi.html /var/www/hi.html
</VirtualHost>
目标是让 www.example.com/hi.html 像上面一样工作,不需要 Alias 行
答案1
mod_wsgi 网站上有关如何执行此操作的文档位于:
http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#The_Apache_Alias_Directive
使用 AddHandler 和 mod_rewrite 的组合。不要使用 WSGIScriptAlias。
答案2
使用 apache 我不相信这是可能的,但是使用 nGinx 则可以。
...
<The rest of your server {} config above>
location @fallback {
proxy_pass http://<your_uwscgi_server>:<port>;
}
error_page 404 = @fallback;
<any futher server {} configuration>
我可能错了,例如,我对 apache 中的 EnvIF 了解不够,并且它可以用来提供类似的功能。