选项 FollowSymLinks 或 SymLinksIfOwnerMatch 已关闭

Posted

技术标签:

【中文标题】选项 FollowSymLinks 或 SymLinksIfOwnerMatch 已关闭【英文标题】:Options FollowSymLinks or SymLinksIfOwnerMatch is off 【发布时间】:2012-08-07 18:36:12 【问题描述】:

我已经阅读了有关此问题的几乎所有可能的内容,但找不到任何可以解决我的问题的内容。 这是我得到的错误日志: 选项 FollowSymLinks 或 SymLinksIfOwnerMatch 关闭,这意味着禁止 RewriteRule 指令:/var/www/vhosts/site.com/httpdocs/cgi-bin/cron.pl

访问站点时,我收到 403 Forbidden “您无权访问此文档。”错误。

我已经修改了我的 .htaccess 文件:

Options +FollowSymLinks +SymLinksIfOwnerMatch
AddDefaultCharset utf-8
RewriteEngine on
RewriteCond %HTTP:Authorization ^(.*)
RewriteRule ^(.*) - [E=HTTP_CGI_AUTHORIZATION:%1]
.
.
.

我也在 httpd.conf 中添加了这个:

AddHandler cgi-script .cgi
AddHandler cgi-script .pl

<Directory />
Options -ExecCGI FollowSymLinks -Includes -IncludesNOEXEC -Indexes -MultiViews -SymLinksIfOwnerMatch
AllowOverride All
</Directory>

接下来我真的可以做什么?

【问题讨论】:

【参考方案1】:

注意您的 Web 应用程序所在的目录不包含在另一个限制 FollowSymLinks 的父目录中。

解决方案是在顶层目录(父目录)启用FollowSymLinks,或者将您的Web应用程序移动到父目录中“无FollowSymLinks”范围之外的目录。

例如,下一个apache 配置可能是一个问题,它肯定会重现该问题:

    <VirtualHost *:80>
      ...  
      <Directory "D:/">
        Options Indexes
      </Directory>

      <Directory "D:/mywebfolder/">
        Options Indexes FollowSymLinks
      </Directory>
      ...
   </VirtualHost>

为了避免这个问题:

    <VirtualHost *:80>
      ...  
      <Directory "D:/">
        Options Indexes FollowSymLinks
      </Directory>
      ...
      ...
   </VirtualHost>

或将您的 D:/mywebfolder/ 移动到另一个单元,例如E:/mywebfolder

【讨论】:

【参考方案2】:

请注意apache docs for option:

将带有 + 或 - 的选项与没有的混合是无效的语法, 并且将在服务器启动期间被语法检查拒绝 中止。

您在块中混合了带有 +/- 和不带 +/- 的选项(即,请参阅 FollowSymLinks)。

我今天在一个我忘记在选项前面添加“+”的网站上出现了同样的错误。我添加了“+”,它现在可以工作了。

【讨论】:

【参考方案3】:

我遇到了这个问题,最后发现因为我将 php 配置为 fast-cgi 而不是作为 apache 模块,所以我必须更新 \conf\extra\httpd-fcgid.conf 然后将 FollowSymLinks 添加到此块

<Files ~ "\.php$">
Options ExecCGI FollowSymLinks
AddHandler fcgid-script .php
FcgidWrapper "d:/php/php-cgi.exe" .php
</Files>

希望这可以帮助某人并节省我浪费的时间。

【讨论】:

救命稻草!!谢谢!! @jiraiya 我现在搬到了 Caddy - 看看caddyserver.com 感谢@TobyAllen!您必须知道,对于使用 httpd-ssl.conf 的人,您也必须在 中添加这些行【参考方案4】:

我最近遇到了类似的错误,我为我修复了它。此问题的一个可能根本原因是错误文本本身中提到的目标文件夹(进行重写)没有设置 FollowSymLinks 选项。从您的错误消息中,我看到这个文件夹是:/var/www/vhosts/site.com/httpdocs/cgi-bin/

在这种情况下,您可以在该特定文件夹的 .htaccess 中使用:

Options +FollowSymLinks

上面的这个设置只会在现有选项的顶部添加这个文件夹的 FollowSymLinks(这就是 + 的意思。它只添加这个选项)。

例子:

<IfModule mod_rewrite.c>
  RewriteEngine On
  Options +FollowSymLinks
</IfModule>

这就是我遇到错误的情况,这就是我修复它的方法。就我而言,有一个不同的文件夹(不是 cgi-bin)和不同的文件(一个 PHP 文件)。

警告:

确保您确实要重写 URL 以指向 cgi-bin。如果您在这里有重要的脚本,它可能会影响安全性,您可能不希望发生这种重写。如果您在 cgi-bin 中进行此设置,人们将能够在 cgi-bin 中查看您的脚本的输出,除非您知道自己在做什么,否则这可能不好。

注意事项:

请注意,根据本地设置/浏览器设置,更新 .htaccess 可能不会在您输入 URL 时立即在浏览器中提供效果,并且可能会立即显示相同的结果,而无需考虑您的对 .htaccess 的修改。在这种情况下,您可能必须重新启动浏览器才能查看修改的效果。对于初学者来说,这在尝试修复时可能非常耗时,并且会混淆为什么它不起作用。另外,如果你修改了httpd.conf(我的帖子不是这样),你必须重新启动网络服务器。

在调查修复我的错误时,我在网上注意到这个错误也发生在某些人身上,对于 Plesk 安装,在这种情况下,该特定问题的解决方案是编辑 /etc/apache2/ mods-enabled/dir.conf,并更新 DirectoryIndex,并将 index.php 移到 index.pl 之前。

【讨论】:

【参考方案5】:

把它放在你的根目录中:

<Directory />
    #AllowOverride none
    Require all denied
    Options FollowSymLinks
    Options SymLinksIfOwnerMatch 
</Directory>

<Directory "root">
    Options FollowSymLinks
    Options SymLinksIfOwnerMatch 
</Directory>

【讨论】:

那个文件名应该是什么?

以上是关于选项 FollowSymLinks 或 SymLinksIfOwnerMatch 已关闭的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress 选项 FollowSymLinks 错误

Vscode rg.exe cpu 占用过高

打开 RewriteEngine 会产生 403 错误——如何打开 FollowSymLinks?

.htaccess "此处不允许的选项"

Apache Options Indexes FollowSymLinks具体解释

Apache Options Indexes FollowSymLinks详解