我正在 rhel 实例中安装 moodle。我想将目录“moodle”保留在 /var/www/http 之外。我遵循这文档。为了定义 moodle 目录,我更新了文件/etc/httpd/conf/httpd.conf
如下:
<Directory "/usr/moodle_dir/moodle">
DirectoryIndex index.php
AcceptPathInfo on
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
Alias /moodle "/usr/moodle_dir/moodle"
所有 moodle 内容都在穆德尔目录。我通过 禁用了 SELinux setenforce 0
。
我将文件权限设置为:
chown -R apache:apache /usr/moodle_dir
当我在浏览器中点击该 URL 时,它显示
您无权访问此服务器上的 /moodle。
有人能告诉我问题出在哪里吗?(当我将 moodle 目录放在 www/http 中时,moodle 页面就会加载到浏览器中。)Php 版本 7.3,rhel:7.7。Moodle 3.8.2 [最新]
更新:
我在 /var/www/html/test 内创建了一个目录,并相应地更新了<Directory
条目Alias
。然后它就成功了。这意味着目录引用正在工作。还有其他东西阻止 httpd 访问外部 www/html 目录。
答案1
使用 Apache 2.4,
Order allow,deny
Allow from all
应替换为
Require all granted
检查你的 php.ini,如果 open_basedir 尚未设置为 /var/www/html/...
; open_basedir, if set, limits all file operations to the defined directory
; and below. This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file.
; http://php.net/open-basedir
;open_basedir =
另外,您是否使用 fpm-php,请检查进程所有者以及其配置中是否设置了 chroot,例如 /etc/php/7.0/fpm/pool.d/www.conf:
; Chroot to this directory at the start. This value must be defined as an
; absolute path. When this value is not set, chroot is not used.
; Note: you can prefix with '$prefix' to chroot to the pool prefix or one
; of its subdirectories. If the pool prefix is not set, the global prefix
; will be used instead.
; Note: chrooting is a great security feature and should be used whenever
; possible. However, all PHP paths will be relative to the chroot
; (error_log, sessions.save_path, ...).
; Default Value: not set
;chroot =