使用符号链接时出现 Apache 500 错误

使用符号链接时出现 Apache 500 错误

以下是我在 CentOS 服务器上部署 php 应用程序时使用的部署脚本的摘录。

echo "Starting Deployment to $SITE_FOLDER (Relase Directory: $RELEASE_DIR)..."
svn --username=$SVN_USER export $REPOSITORY $DEPLOY_FOLDER/releases/$RELEASE_DIR

echo "CHMOD 755 of Release Directory"
chmod 755 -R $DEPLOY_FOLDER/releases/$RELEASE_DIR

echo "Making Symbolic Link."
ln -nfs $DEPLOY_FOLDER/releases/$RELEASE_DIR/ $DEPLOY_FOLDER/public_html

我曾在类似环境中成功使用过它。我正在新服务器上设置它,在我删除它之前,apache 可以从 public_html 很好地提供文件。

现在它通过符号链接提供服务,所有 php 文件都会引发 500 错误。非 .php 文件可以正常提供服务。

我尝试过以不同的 apache 用户和不同的权限更改目录的所有者,但似乎没有任何效果。有什么想法吗?提前感谢帮助!

答案1

您需要添加 FollowSymlinks 指令,例如:

<Directory /usr/local/httpd/htdocs>
Options Indexes FollowSymLinks
</Directory> 

http://httpd.apache.org/docs/2.2/mod/core.html#directory

答案2

我遇到了同样的问题,罪魁祸首是 suPHP。符号链接始终为 777,而 suPHP 强制使用 755,因此会引发 500 错误。

答案3

它可以是任何东西,所以最好检查 Apache 错误日志(在 500 上你总会遇到一些错误)。

通常 Apache 会跟随链接,但它可能有SymLinksIfOwnerMatch(而不是FollowSymLinks),因此您必须确保您访问的文件和文件夹(index.php& public_html)具有正确的所有者(所有者匹配)并且权限不太宽(应该是755public_html

如果您获得了错误的权限(例如 664),您可能会收到此错误:

Application.cpp 中的 SoftException:256: 文件“/home/foo/public_html/index.php”可由组写入

因此这可能会有帮助:

chown $USER public_html public_html/index.php
chmod 755 public_html

由于您正在处理的符号链接始终为 777,但这并不重要,因为符号链接的权限从未使用过。更改目标文件夹的权限应该可以正常工作。

相关内容