选项FollowSymLinks或SymLinksIfOwnerMatch已关闭。

34
我已经阅读了几乎所有可能的解决方法,但都找不到解决我的问题的方法。 这是我得到的错误日志: 选项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个回答

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


13

我曾遇到这个问题,最终发现由于我配置了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>

希望这能对某些人有所帮助,也能节省我浪费的时间。


1
救命稻草!谢谢! - jiraiya
@jiraiya 我现在已经转向使用Caddy了 - 请看一下 https://caddyserver.com/ - Toby Allen
谢谢@TobyAllen!你必须知道,对于使用httpd-ssl.conf的人来说,在<VirtualHost *:443>中也必须添加这些行。 - monstergold

10

请注意来自apache选项文档的内容

将带有+或-的选项与不带+/-的选项混合使用是无效的语法,会在服务器启动时通过语法检查被拒绝并中止。

您正在混合选项和没有+/-的选项(例如,请参见FollowSymLinks)。

我今天在我的一个网站上遇到了完全相同的错误,我忘记在一个选项前面加上"+"。 我添加了“+”后,现在它可以正常工作。


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之前。

0
将此放入您的根目录中:
<Directory />
    #AllowOverride none
    Require all denied
    Options FollowSymLinks
    Options SymLinksIfOwnerMatch 
</Directory>

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

1
那个文件的文件名应该是什么? - brentonstrine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接