我正在尝试建立一个 PHP 开发环境,可以自动处理多个项目,而无需为每个项目创建单独的 vHost,这部分运行良好。
我完成了我已完成的所有步骤:
sandbox
我在我的主目录中创建了一个名为的目录,并将其符号链接到/var/www/sandbox
ln -s ~/沙盒 /var/www/沙盒
然后我创建了一个 apache 配置文件
sites-avaialble
并启用了它,这个配置文件是一个虚拟主机,它将每个.test
域指向一个/var/www/sandbox/
目录,例如,如果你浏览http://wordpress.test
它将指向/var/www/sandbox/wordpress
所有这些部分都工作正常,但问题在于权限,我从我的主目录(〜/ sandbox)创建我的项目,并且在我创建的每个产品中,PHP文件都没有写权限,所以我必须手动或使用www-data
bash脚本将项目的每个文件和目录的所有权分配给用户。
我尝试将sandbox
目录的所有者更改为www-data
,但没有任何影响,而且我在此目录中创建的每个文件夹都存在权限问题。
编辑:
我真正想要实现的是,当我在~/sandbox
目录下创建一个项目时,我不必手动修复文件所有权/权限,例如,现在当我想创建一个 WordPress 项目时,我必须运行这个脚本为了修复权限,我可以创建新文件夹(主题和插件),并且 php 文件具有写入权限,以便 WordPress 功能正常运行
答案1
如果您在计算机上使用 Apache 服务器仅进行开发,则可以尝试让它以本地用户身份运行。
为此,请调整APACHE_RUN_USER
您的 /etc/apache2/envvars。
我不会触碰该组,因为存在风险,您随后必须更改许多所有权或权限,并确保您的 apache 服务器无法通过网络从“外部”访问。(例如,让它只监听 localhost 而不是 0.0.0.0)
答案2
根目录应该始终有执行权限和索引文件应该有读允许
sudo chmod -R 775 /path/to/root-directory
另外,添加目录的所有权
sudo chown -R user:group /path/to/root-directory
最后,重新启动 Apache Web 服务器,
sudo service apache2 restart
调整 Web 服务器配置中的指令,
<Directory "/var/www/sandbox/wordpress">
AllowOverride None
Require all granted
</Directory>
答案3
您可以将 的组所有权更改为/var/www/sandbox
,www-data
然后启用写入和设置组ID在目录中递归。setgid 位使目录中所有新创建项目的组所有者与父级的组所有者相同,父级www-data
在我们的 csae 中。您可以/应该将用户所有者保留为您自己的用户。
# Make you the owner and `www-data` the group owner of /var/www/sandbox
sudo chown -R <your user>:www-data /var/www/sandbox
# Give owning user and group read/write permissions, remove all permissions for everyone else
sudo chmod -R u=rwX,g=rwX,o= /var/www/sandbox
# Enable the setgid bit on /var/www/sandbox and all descendant directories
find /var/www/sandbox -type -d -exec sudo chmod g+s {} \;