选项FollowSymLinks或SymLinksIfOwnerMatch已关闭

时间:2012-08-10 12:48:10

标签: apache .htaccess rewrite httpd.conf

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

我真的可以做什么呢?

5 个答案:

答案 0 :(得分:18)

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

解决方案是在顶层目录(父目录)启用FollowSymLinks,或将您的Web应用程序移动到父目录中“no 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

答案 1 :(得分:11)

请注意apache docs for option

  

将选项与+或 - 混合使用不带有效语法,   并且将在服务器启动期间通过语法检查拒绝   中止。

您正在使用+/-混合选项而不在您的块中(即参见FollowSymLinks)。

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

答案 2 :(得分:9)

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

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

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

答案 3 :(得分: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可能无法立即在浏览器中显示效果,并且可能会立即显示相同的结果,而不考虑您的修改.htaccess。在这种情况下,您可能必须重新启动浏览器才能看到修改的效果。对于初学者来说,这在尝试修复时非常耗时,并且会混淆为什么它不起作用。此外,如果您修改httpd.conf(不是我的帖子中的情况),您必须重新启动Web服务器。

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

答案 4 :(得分:0)

将它放在根目录中:

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

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