我目前可以在我的Apache服务器上通过mod_wsgi或PHP运行Django。
我的Django项目运行于:http://localhost,源代码位于C:/ django_proj
我的PHP项目运行于:http://php.localhost,源代码位于C:/ web
如果我打开它们,php.localhost和localhost转到Django项目。我已经通过Apache虚拟主机设置了它们。
以下是httpd.conf中的一些相关行:
DocumentRoot "C:/web"
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
<Directory "C:/web">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory "C:/django_proj">
Order allow,deny
Allow from all
</Directory>
Include "C:/django_proj/apache/apache_django_wsgi.conf"
apache_django_wsgi.conf
中的相关行是:
WSGIScriptAlias / "C:/django_proj/apache/proj.wsgi"
<Directory "C:/django_proj/apache">
Order allow,deny
Allow from all
</Directory>
在httpd-vhosts.conf中:
<Directory C:/web>
Order Deny,Allow
Allow from all
</Directory>
<Directory C:/django_proj>
Order Deny,Allow
Allow from all
</Directory>
<VirtualHost *:80>
DocumentRoot "C:/django_proj"
ServerName localhost
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/web"
ServerName php.localhost
</VirtualHost>
我的PHP项目目前无法访问。有没有人有任何我缺少的想法?
答案 0 :(得分:32)
我用一个Apache运行了几十个mod_wsgi / Django站点,PHP站点和一个Rails站点。
它主要使用虚拟主机完成,但我有一些在同一个域上运行。
您只需将WSGIScriptAlias /...
放在任何其他位置/别名指令之后。
让我们说,例如,我想在与Django网站相同的域上运行phpMyAdmin。配置看起来像这样:
Alias /phpmyadmin /full/path/to/phpmyadmin/
<Directory /full/path/to/phpmyadmin>
Options -Indexes
...etc...
</Directory>
WSGIScriptAlias / /full/path/to/django/project/app.wsgi
<Directory /full/path/to/django/project>
Options +ExecCGI
...etc...
</Directory>
修改:
您的配置应如下所示:
<VirtualHost *:80>
DocumentRoot "C:/django_proj"
ServerName localhost
WSGIScriptAlias / "C:/django_proj/apache/proj.wsgi"
<Directory "C:/django_proj/apache">
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/web"
ServerName php.localhost
Alias / C:/web
<Directory C:/web>
Options Indexes FollowSymLinks
AllowOverride None
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>
您不需要<Directory>
中的http.conf
指令...在虚拟主机中执行所有配置。
另外,完全摆脱<Directory />
阻止。
答案 1 :(得分:8)
你的WSGIScriptAlias / ...
指令告诉Apache所有以“/”开头的请求都应该通过Django的WSGI处理程序提供。如果您将其更改为读取WSGIScriptAlias /django-proj/ ...
,则只有以“/ django-proj”开头的请求才会传递到Django。
另一种方法是开始为每个项目设置虚拟主机。通过这种方式,您可以将Apache配置为将每个项目放在其自己的域中,并且您不必担心影响其他项目的项目的配置。
答案 2 :(得分:0)
我遇到了同样的问题。 尝试在httpd-conf。
中删除此块<Directory />
包含httpd-vhost.conf,并尝试将我的WSGIScriptAlias / "/somewhere/file.wsgi"
放在httpd-vhosts的虚拟主机部分,该部分侦听端口80。
答案 3 :(得分:0)
我想补充一点,如果您使用的是Apache ProxyPass ,则可以拒绝某些网址格式,使其落入mod_php。
ProxyPass /wordpress !
<Location /wordpress>
Require all granted
</Location>