两个 VHost 使用相同的 DocumentRoot,PHP 无法在第二个 VHost 上运行

两个 VHost 使用相同的 DocumentRoot,PHP 无法在第二个 VHost 上运行

我正在帮助维护一个基于 Magento 的电子商务网站。该网站是我们批发客户的销售渠道。我们最近决定开设第二家商店,以接触我们的零售客户。我们决定在我们的 Magento 商店内建立另一个网站,以便我们可以在两个商店之间共享产品。

我正在服务器上设置这个新网站,但遇到了一个问题。我为新的零售网站设置了第二个虚拟主机,并将此虚拟主机的 DocumentRoot 与批发网站的 DocumentRoot 设置为相同,这样我们就可以对两个网站使用一个 magento 应用程序。这就是错误发生的地方。

当我浏览新商店时,它会触发下载 index.php 文件。所以我知道 DocumentRoot 指令正在运行,但似乎 PHP 在此过程中被破坏了。

我使用 plesk 来管理服务器。我已确保在两个虚拟主机上都启用了 PHP,但仍然遇到同样的问题。

这听起来像是 PHP 崩溃的问题,还是我的 vhost.conf 文件设置不正确?(尽管 vhost 由 plesk 管理并且看起来正确)

任何帮助都感激不尽。

编辑:

这是 vhost 配置(由 plesk 生成):

<VirtualHost IPADDRESS:80>
ServerName   domain.com:80
ServerAdmin  "[email protected]"
DocumentRoot /var/www/vhosts/domain.com/subdomains/tk/httpdocs
CustomLog  /var/www/vhosts/domain.com/statistics/logs/access_log plesklog
ErrorLog  /var/www/vhosts/domain.com/statistics/logs/error_log
<IfModule mod_ssl.c>
    SSLEngine off
</IfModule>
<Directory  /var/www/vhosts/domain.com/subdomains/tk/httpdocs>
<IfModule mod_php4.c>
    php_admin_flag engine on
    php_admin_flag safe_mode off
    php_admin_value open_basedir "/var/www/vhosts/domain.com/subdomains/tk/httpdocs:/tmp"
</IfModule>
<IfModule mod_php5.c>
    php_admin_flag engine on
    php_admin_flag safe_mode off
    php_admin_value open_basedir "/var/www/vhosts/mkdesigngroup.com/subdomains/tk/httpdocs:/tmp"
</IfModule>
    Options -Includes -ExecCGI
</Directory>
Include /var/www/vhosts/domain.com/subdomains/tk/conf/vhost.conf

这是我在 vhost.conf(包含在 plesk 中)中添加的内容:

DocumentRoot /var/www/vhosts/domain.com/subdomains/dev/httpdocs

-紧握

答案1

您的 DocumentRoot 尚未启用 PHP。

<IfModule mod_php5.c>
php_admin_flag engine on
</IfModule>

需要出现在 conf 的 Virtualhost 部分或 Directory 部分中 - 但它需要是作为文档根目录列出的目录:

<Directory  /var/www/vhosts/domain.com/subdomains/dev/httpdocs>
    <IfModule mod_php5.c>
      php_admin_flag engine on
      php_admin_flag safe_mode off
      php_admin_value open_basedir "/var/www/vhosts/domain.com/subdomains/dev/httpdocs:/tmp"
    </IfModule>
</Directory>

答案2

如果它不能正确解释 index.php 并且没有在浏览器中将其显示为页面,那么 Web 服务器就不知道.php应该将其视为可查看文件。

有一个文件可以启用 index.php 文件和 index.html 文件。我认为这是一个需要的 PHP 配置调整。

- 编辑 -

由于没有说清楚,我可能混淆了两件事。

在 Ubuntu Lucid 上有一个文件 ( /etc/apache2/mods-available/dir.conf) 允许将 index.php 视为索引文件,即您可以写 www.me.com 而不是 www.me.com/index.php 来查看它。

<IfModule mod_dir.c>

DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

</IfModule>

如果存在的话,那么就需要进行另一个 PHP 调整,就像著名的php5-mysql让 PHP 与 MySQL 数据库对话所需的调整一样。

答案3

您的 Apache 只提供 .php 文件而不尝试解释它,这表明第二个 vhost 配置不正确。在第二个 vhost 上启用 php 后,您是否重新启动了 Apache?

答案4

您还可以使用以下代码将 .htaccess 文件放在文档根目录中

# Set the default handler.
DirectoryIndex index.php index.html index.htm

相关内容