32

我已经阅读了有关此问题的几乎所有可能的内容,但找不到任何可以解决我的问题的内容。这是我得到的错误日志:选项 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>

真的,接下来我能做什么?

4

5 回答 5

21

注意您的 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

于 2013-06-19T21:24:09.050 回答
11

请注意选项的 apache 文档中的这一点:

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

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

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

于 2012-10-17T21:33:41.063 回答
11

我遇到了这个问题,最后发现因为我将 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>

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

于 2016-02-07T18:26:26.710 回答
5

我最近遇到了类似的错误,我为我修复了它。此问题的一个可能根本原因是错误文本本身中提到的目标文件夹(进行重写)没有设置 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(不是我的帖子中的情况),您必须重新启动 Web 服务器。

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

于 2014-09-15T07:22:34.633 回答
0

把它放在你的根目录中:

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

<Directory "root">
    Options FollowSymLinks
    Options SymLinksIfOwnerMatch 
</Directory>
于 2014-03-04T11:26:17.090 回答