如何在一台Apache服务器上同时运行Django和PHP?

如何在一台Apache服务器上同时运行Django和PHP?,php,django,apache-config,Php,Django,Apache Config,目前,我可以在Apache服务器上通过mod_wsgi或PHP运行Django 我的Django项目运行于:并且源代码位于C:/Django_proj 我的PHP项目运行于:并且源代码位于C:/web 如果同时启用这两个选项,php.localhost和localhost将转到Django项目。我已经通过Apache虚拟主机设置了它们 以下是httpd.conf中的一些相关行: DocumentRoot "C:/web" <Directory /> Options Foll

目前,我可以在Apache服务器上通过mod_wsgi或PHP运行Django

我的Django项目运行于:并且源代码位于C:/Django_proj

我的PHP项目运行于:并且源代码位于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"
在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>

命令拒绝,允许
通融
命令拒绝,允许
通融
DocumentRoot“C:/django_项目”
服务器名本地主机
DocumentRoot“C:/web”
ServerName php.localhost

我的PHP项目当前无法访问。有人知道我遗漏了什么吗?

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


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

我运行了几十个mod_wsgi/Django站点、PHP站点和一个带有单个Apache的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>
Alias/phpmyadmin/full/path/to/phpmyadmin/
选项-索引
等
WSGIScriptAlias//full/path/to/django/project/app.wsgi
选项+执行CGI
等
编辑

您的配置应该如下所示:

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>

DocumentRoot“C:/django_项目”
服务器名本地主机
WSGIScriptAlias/“C:/django_proj/apache/proj.wsgi”
选项+执行CGI
命令允许,拒绝
通融
DocumentRoot“C:/web”
ServerName php.localhost
别名/C:/web
选项索引跟随符号链接
不允许超限
命令拒绝,允许
通融
您不需要
http.conf
中的那些
指令。。。在虚拟主机中执行所有配置

另外,完全摆脱
块。

我也有同样的问题。 尝试在httpd-conf中删除此块


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

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

ProxyPass /wordpress !
<Location /wordpress>
    Require all granted
</Location>
ProxyPass/wordpress!
要求所有授权

知道这一点很好,但我想将Django项目指向y主域,而将PHP项目指向子域,例如:-->my Django Proj-->my PHP Proj您知道如何实现上述目标吗?我已经将上述内容作为虚拟主机运行。您需要将和指令放入适当的块中。换句话说,将WSGIScriptAlias放在ServerName为localhost的块中。我将通过编辑我的答案使它更清楚。谢谢你的帮助,它正在工作。我删除了“别名/C:/web”,现在它可以正常工作了。我还从httpd.conf中取出了目录块。在django VH部分
DocumentRoot“C:/django\u proj”
是否需要?我认为这条线会引起安全问题…?@VanGale这是一个很好的答案;你能解释为什么VHOST比别名好吗?或者两者之间的真正区别是什么?谢谢