【问题标题】:PHP not served when not in document root不在文档根目录中时不提供 PHP
【发布时间】:2020-09-12 09:39:56
【问题描述】:

我在 F31 上的 apache 2.4.43 除了文档根(默认为 /var/www/html)以外的任何地方都没有为 PHP 提供服务。我在 /etc/http/conf.d 中有指令,如果我在其中出现语法错误,则 apache 无法启动。所以如果我有

Alias "/mine/" "/home/pete/mine/"

<Directory "/home/pete/mine/">
    Options MultiViews FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

我在 /home/pete/mine 中有一个文件 abc.php,然后当我尝试使用 URL http://localhost/mine/abc.php 时得到 404

顺便说一句,我确实已将 apache 添加到适当的组中,因此自主访问控制不会妨碍此事。

我已经跟踪了 apache,它似乎期望 /home/pete/mine/abc.php 成为一个目录,因为它正在那里寻找一个 .htaccess,这让我觉得它在这里忽略了 .php 扩展名。当我将 abc.php 放在 /var/www/html 中时,我可以通过 http://localhost/abc.php 访问它。 相同的设置适用于 CentOS7,所以这一定是一些 Fedora31 apache 版本相关的问题或某种 sysctl 设置。

这是strace:

    [root@localhost conf.d]# strace -f httpd -X 2>&1 | grep mine
    [pid 25020] read(14, "GET /mine/abc.php HTTP/1."..., 8000) = 398
    [pid 25020] stat("/home/pete/mine/abc.php", {st_mode=S_IFREG|0644, st_size=15914, ...}) = 0
    [pid 25020] openat(AT_FDCWD, "/home/pete/mine/abc.php/.htaccess", O_RDONLY|O_CLOEXEC) = -1 ENOTDIR (Not a directory)
    ^C
    [root@localhost conf.d]# stat /home/pete/mine/abc.php
      File: /home/pete/mine/abc.php
      Size: 15914           Blocks: 32         IO Block: 4096   regular file
    Device: fd02h/64770d    Inode: 23462670    Links: 1
    Access: (0644/-rw-r--r--)  Uid: ( 1605/   pete)   Gid: ( 1501/  pete)
    Access: 2020-05-25 15:27:12.996084665 +0000
    Modify: 2020-05-25 17:03:51.577115385 +0000
    Change: 2020-05-25 17:03:51.577115385 +0000
     Birth: 2020-05-25 12:00:02.317331989 +0000

stat 清楚地表明它是一个常规文件,所以为什么 apache 决定将它视为一个目录是我无法理解的。

我还注意到 AH01071:在日志中出现错误“主要脚本未知”

【问题讨论】:

    标签: php apache http


    【解决方案1】:

    您使用了错误的别名规范。

    应该是

    Alias "/mine" "/home/pete/mine"
    <Directory "/home/pete/mine">
        Options MultiViews FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    

    查看Apache documentation了解更多详情

    没有最后一个 / apache 将在该矿井目录中查找基于 DirectoryIndex 定义的文件(您的基本文件可以是您在那里定义的任何内容)

    【讨论】:

    • 删除斜线恐怕没什么区别。
    • 那么您的 vhost 定义中可能还有其他一些导致问题的错误配置
    • 似乎 PHP 的 FilesMatch 没有选择它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 2014-12-18
    • 2023-03-20
    相关资源
    最近更新 更多