选项FollowSymLinks或SymLinksIfOwnerMatch已closures

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

访问网站时,我得到403禁止“您没有权限访问此文档”。 错误。

我已经修改我的.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> 

真的,接下来我该怎么办?

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

请注意,从Apache文档的选项 :

将带有+或 – 的选项与带有这些选项的选项混合是无效的语法,并且将在服务器启动时通过中止语法检查而被拒绝。

你正在混合选项与+/-和没有在你的块(即见FollowSymLinks)。

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

我有这个问题,最后发现,因为我的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> 

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

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

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

 Options +FollowSymLinks 

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

例:

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

这是我的错误,这是我如何解决这个问题。 在我的情况下,有一个不同的文件夹(不是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。

把这个放在你的根目录下:

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