我试图build立一个简单的networking应用程序,我有一些困难。
以下是我如何设置:
/srv/www/application <-- python code /srv/www/public_html <-- document root
我希望Apache可以在public_html中find它,否则将请求发送给我的应用程序。
我的虚拟主机文件的一个片段:
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>
我真的不知道.. /应用程序,(因为我认为它重写到一个url,而不是一个目录),我怀疑这就是为什么它不工作,但我找不到一个方法,使其工作。
更新
我已经应用了Cakemox的build议,但仍然存在一些问题。 以下是我所做的:
WSGIScriptAlias / /srv/www/application/code.py
这条路线一切到我的应用程序。 奇怪的是,它的工作了一会儿,即在public_html内find的文件被送达,其余的被路由到我的应用程序,但我想浏览器的caching玩弄技巧。
我也试过:
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经过近2天的头部砸键盘(我现在可以触摸我的大脑),我想我终于明白了。 我在最后一段提到的“众多应用程序”主要是PHP应用程序,其中应用程序index.php位于public_html文件夹中。 所以浏览mydomain.com,Apache首先search默认索引(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
这只适用于目标path在同一分区上的情况。
你也可以使用绑定装载 :
mount --bind /path/to/orig/dir newdir/path
并且可以在/etc/fstab 重新启动后保持bind mounts :
/my/real/dir /to/mount/dir auto rw,bind 0 0