我目前可以在我的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项目目前无法访问。有没有人有任何我缺少的想法?

有帮助吗?

解决方案

我用一个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 />阻止。

其他提示

您的WSGIScriptAlias / ...指令告诉Apache所有请求都以<!> quot; / <!>开头;应该通过Django的WSGI处理程序获取。如果您将其更改为读取WSGIScriptAlias /django-proj/ ...,则只有以<!>引号开头的请求/ / django-proj <!>会被传递到Django。

另一种方法是开始为每个项目设置虚拟主机。通过这种方式,您可以将Apache配置为将每个项目放在其自己的域中,并且您不必担心影响其他项目的项目的配置。

我遇到了同样的问题。 尝试在httpd-conf。

中删除此块<Directory />

包含httpd-vhost.conf,并尝试将我的WSGIScriptAlias / "/somewhere/file.wsgi"放在httpd-vhosts的虚拟主机部分,该部分侦听端口80。

我想补充一点,如果您使用的是Apache ProxyPass ,则可以拒绝某些URL模式,使其落入mod_php。

ProxyPass /wordpress !
<Location /wordpress>
    Require all granted
</Location>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top