Назад | Перейти на главную страницу

Apache virtualhost - применять скрипт только в том случае, если файл не существует в корне документа

Извините за вопрос новичка об 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, это может быть использовано для обеспечения аналогичной функциональности.