26

我目前可以在我的 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 项目当前无法访问。有人知道我缺少什么吗?

4

4 回答 4

35

我用一个 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 />障碍。

于 2009-06-20T01:12:47.697 回答
8

您的WSGIScriptAlias / ...指令告诉 Apache 以“/”开头的所有请求都应该通过 Django 的 WSGI 处理程序提供。如果您将其改为读取WSGIScriptAlias /django-proj/ ...,则只有以“/django-proj”开头的请求才会传递到 Django。

另一种方法是开始为每个项目设置虚拟主机。这样,您可以将 Apache 配置为将每个项目放在它自己的域的 / 中,并且您无需担心一个项目的配置会影响您的其他项目之一。

于 2009-06-19T23:21:45.283 回答
0

我有同样的问题。尝试<Directory />在 httpd-conf 中删除此块。

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

于 2011-10-14T12:37:56.497 回答
0

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

ProxyPass /wordpress !
<Location /wordpress>
    Require all granted
</Location>
于 2017-03-07T15:31:54.423 回答