首页 文章

选项FollowSymLinks或SymLinksIfOwnerMatch已关闭

提问于
浏览
29

我已经阅读了几乎所有可能的问题,但找不到任何能解决我问题的方法 . 这是我得到的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 回答

  • 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

  • 11

    请注意apache docs for option

    使用a或 - 将选项与没有的语句混合使用语法无效,并且在服务器启动期间通过语法检查中止将被拒绝 .

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

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

  • 5

    我有这个问题,终于发现因为我用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>
    

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

  • 9

    我最近有类似的错误,我为我修复了它 . 此问题的一个可能根本原因是错误文本本身中提到的目标文件夹(对其进行重写)没有设置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中查看脚本的输出,除非你知道你在做什么,否则这可能不太好 .

    笔记:

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

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

  • 0

    把它放在你的根目录中:

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

相关问题