Извините за вопрос новичка об apache. Мне интересно, можно ли настроить следующий нестандартный виртуальный хост apache (для приложения Django):
- Если файл существует в DocumentRoot (/ var / www), он будет показан. Так что, если /var/www/foo.html существует, его можно увидеть на www.example.com/foo.html.
- Если файл не существует, он обслуживается через виртуальный хост. Я использую mod_wsgi с директивой WSGIScriptAlias, которая указывает на приложение Django. Таким образом, если нет /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.
Документация на сайте mod_wsgi о том, как это сделать, находится по адресу:
http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#The_Apache_Alias_Directive
Используйте комбинацию AddHandler и mod_rewrite. Не используйте WSGIScriptAlias.
Используя 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>
Я могу ошибаться, например, я недостаточно знаю EnvIF в apache и ether, это может быть использовано для обеспечения аналогичной функциональности.