Php 在Apache VirtualHost中配置别名和目录

Php 在Apache VirtualHost中配置别名和目录,php,apache,virtualhost,Php,Apache,Virtualhost,我有一个现有子域subdomain.mysite.com,用于SSL。我正在尝试在这个子域上安装,但我不确定如何使用Apache正确安装 我已经按照提供的说明进行了操作。例如,subdomain.mysite.com的DocumentRoot是/var/www/subdomain,两个pwpusher目录位于/var/www/ppush中。我已将安装说明中给出的代码完全添加到相应的VirtualHost中,并已按指定编辑代码,以指向所有内容的适当目录。但是,当我尝试转到子域上的别名目录时,我得到

我有一个现有子域subdomain.mysite.com,用于SSL。我正在尝试在这个子域上安装,但我不确定如何使用Apache正确安装

我已经按照提供的说明进行了操作。例如,subdomain.mysite.com的DocumentRoot是
/var/www/subdomain
,两个pwpusher目录位于
/var/www/ppush
中。我已将安装说明中给出的代码完全添加到相应的VirtualHost中,并已按指定编辑代码,以指向所有内容的适当目录。但是,当我尝试转到子域上的别名目录时,我得到了404。(是的,我重新启动了Apache。)

如何让给定的Apache配置在现有VirtualHost中工作?下面是VirtualHost的完整代码,针对我上面给出的位置进行了编辑

<VirtualHost *:80 *:443>
        ServerName subdomain.mysite.com

        ServerAdmin emailaddress@host.com
        DocumentRoot /var/www/subdomain

        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

        SSLEngine on
        SSLProtocol all -SSLv3
        SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

        SSLCertificateFile /path/to/cert.crt
        SSLCertificateKeyFile /path/to/key.key
        SSLCertificateChainFile /path/to/cert2.pem

    ##### PHPasswordPusher #####

        Alias /pwpusher/ /var/www/ppush/pwpusher_public/

        <Directory /var/www/ppush/pwpusher_public/>
            AllowOverride None
            Order allow,deny
            Allow from all
            DirectoryIndex pw.php
        </Directory>

        <Directory /var/www/ppush/pwpusher_private/>
            AllowOverride None
            Order deny,allow
            Deny from all
        </Directory>
</VirtualHost>

ServerName subdomain.mysite.com
服务器管理员emailaddress@host.com
DocumentRoot/var/www/subdomain
重新启动发动机
重写条件%{HTTPS}关闭
重写规则(*)https://%{HTTP\u HOST}%{REQUEST\u URI}
斯伦金安
SSLProtocol all-SSLv3
SSLCipherSuite全部:!ADH:!出口:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile/path/to/cert.crt
SSLCertificateKeyFile/path/to/key.key
SSLCertificateChainFile/path/to/cert2.pem
#####PHPasswordPusher#####
别名/pwpusher//var/www/ppush/pwpusher\u public/
不允许超限
命令允许,拒绝
通融
DirectoryIndex pw.php
不允许超限
命令拒绝,允许
全盘否定

除了
虚拟主机的
*:80
之外,所有配置看起来都正常,当使用
http://
打开URL时,它将生成“错误请求”错误(我建议您将SSL指令移到
),但这不是404错误的原因

有点粗糙,但您可以通过运行

strace -p $(pgrep apache2 | xargs | sed 's/ / -p /g')
然后打开页面。在最后一行中,您应该看到如下内容:

stat("/var/www/dsd", 0x7fff470d2400) = -1 ENOENT (No such file or directory)

所有配置看起来都正常,除了
VirtualHost
*:80
,这将生成“错误请求”错误,但不会成为404错误的原因。有点粗糙,但您可以通过运行
strace-p$(pgrep apache2 | xargs | sed's//-p/g')
并打开页面来尝试了解Apache真正访问的目录。在最后一行中,您应该会看到类似于
stat(“/var/www/dsd”,0x7fff470d2400)=-1enoint(没有这样的文件或目录)
@user3584460这是一个很棒的命令,谢谢!但它似乎完全忽略了
别名
——该命令报告如下:
[pid 1228]lstat(“/var/www/subdomain/pwpusher”,0x7ffcc44c90f0)=-1 enoint(没有这样的文件或目录)
。利用我发现的信息;删除尾部的
/
修复了我的问题。如果你想把这个作为一个答案,我非常乐意给你荣誉/赏金。非常感谢。对于阅读此评论而非原始评论的任何人,我在上面发布了以下内容:这是一个很棒的命令,谢谢!但它似乎完全忽略了
别名
——该命令报告如下:
[pid 1228]lstat(“/var/www/subdomain/pwpusher”,0x7ffcc44c90f0)=-1 enoint(没有这样的文件或目录)
。利用这些信息,我发现了这个问题;删除尾部的
/
修复了我的问题。非常感谢。