Я пытаюсь настроить простое веб-приложение, но у меня возникли трудности.
Вот как я его настроил:
/srv/www/application <-- python code
/srv/www/public_html <-- document root
Я хочу, чтобы Apache обслуживал все в public_html, если он может это найти, иначе отправил запрос в мое приложение.
фрагмент моего файла виртуального хоста:
DocumentRoot /srv/www/public_html
<Directory /srv/www/public_html>
Options -Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ../application/code.py/$1 [L]
</Directory>
Я действительно не уверен насчет ../application (потому что я думаю, что он переписывается на URL-адрес, а не в каталог), и я подозреваю, что именно поэтому он не работает, но я не могу найти способ заставить его работать .
Обновить
Я применил предложение Cakemox, но проблемы остались. Вот что я сделал:
WSGIScriptAlias / /srv/www/application/code.py
Это направляет все в мое приложение. Как ни странно, на мгновение это сработало, то есть файл, найденный внутри public_html, был обслужен, а остальное было перенаправлено в мое приложение, но я предполагаю, что кеш браузера обманул меня.
Я также пробовал:
WSGIScriptAlias /application /srv/www/application/code.py
<Directory /srv/www/public_html>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ application/$1 [L]
</Directory>
Это работало большую часть времени, за исключением того, что URL-адрес по умолчанию (mydomain.com) отображал мой каталог public_html вместо запуска приложения. Я предполагаю, что это потому, что запрошенное имя файла / srv / www / public_html, которое является каталогом, поэтому условие ложно. Это странно, потому что у меня множество приложений отлично работает в этих условиях ...
Обновление 2 После почти двух дней работы с клавиатурой (теперь я могу трогать свой мозг), я думаю, что наконец понял. «Многочисленные приложения», о которых я говорил в последнем абзаце, в основном были приложениями PHP, в которых приложение index.php находится в папке public_html. Итак, просматривая mydomain.com, Apache сначала ищет индекс по умолчанию (DirectoryIndex) перед применение любых правил перезаписи. Поскольку в моей папке public_html нет файлов index.php, index.htm или index.html, он просто указал каталог. Чтобы исправить это, я могу добавить DirectoryIndex / application или RewriteRule ^ $ / application перед условиями. Вот последний фрагмент:
<Directory /srv/www/public_html>
DirectoryIndex /application
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ application/$1 [L]
</Directory>
Спасибо.
На ум приходит псевдоним:
Alias /application "/srv/www/application"
Я делаю это все время через символические ссылки:
ln -s /path/to/target localname
Это работает, только если целевой путь находится в том же разделе.
Вы также можете использовать привязать крепления:
mount --bind /path/to/orig/dir newdir/path
И ты можешь оставить bind mounts
активен после перезапуска в /etc/fstab
:
/my/real/dir /to/mount/dir auto rw,bind 0 0