web-dev-qa-db-ja.com

オプションFollowSymLinksおよびSymLinksIfOwnerMatchはオフです

私はこの問題について可能な限りほとんどすべてを読みましたが、私の問題を解決するものを見つけることができませんでした。これは私が取得しているエラーログです:オプション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>

本当に次に何ができますか?

29
user1590251

Webアプリケーションが存在するディレクトリが、FollowSymLinksを制限している別の親ディレクトリに含まれていないことに注意してください。

解決策は、最上位ディレクトリ(親ディレクトリ)でFollowSymLinksを有効にするか、親ディレクトリの「no​​ FollowSymLinks」のスコープ外のディレクトリにWebアプリケーションを移動することです。

たとえば、次の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

18
Hokusai

オプションのApacheドキュメント からこれに注意してください:

+または-のオプションとオプションの混在は有効な構文ではないため、サーバーの起動中に中止を伴う構文チェックによって拒否されます。

ブロックで+/-ありとなしのオプションを混合しています(つまり、FollowSymLinksを参照)。

オプションの前に「+」を追加するのを忘れていたサイトの1つで、今日同じエラーが表示されました。 「+」を追加しましたが、機能します。

11
user12345

この問題があり、Apacheモジュールとしてではなくfast-cgiを使用してphpを構成したため、\conf\extra\httpd-fcgid.confそして、このブロックにFollowSymLinksを追加しました

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

これが誰かを助け、私が無駄にした時間を節約することを願っています。

10
Toby Allen

最近、同様のエラーが発生したため、修正しました。この問題の考えられる根本的な原因の1つは、エラーテキスト自体に記載されているターゲットフォルダ(書き換え先)に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ファイル)がありました。

警告:

  • Cgi-binを指すようにURLを本当に書き換えたいことを確認してください。ここに重要なスクリプトがある場合、セキュリティに影響を与える可能性があり、この書き換えを実行したくない場合があります。 cgi-binでこの設定を行うと、人々はcgi-binでスクリプトの出力を表示できるようになります。これは、あなたが何をしているのかを知らないと良くないかもしれません。

ノート:

  • ローカル設定/ブラウザ設定によっては、URLを入力したときに.htaccessを更新してもブラウザですぐに効果が得られず、.htaccessへの変更を考慮せずにすぐに同じ結果が表示される場合があります。この場合、変更の効果を確認するためにブラウザーを再起動する必要があります。初心者にとっては、修正しようとすると非常に時間がかかり、動作しない理由がわかりにくくなります。また、httpd.confを変更した場合(私の投稿ではそうではありません)、Webサーバーを再起動する必要があります。

  • エラーの修正を調査しているときに、Pleskのインストールでこのエラーが発生していることをWebで確認しました。この場合、その特定の問題の解決策は/ etc/Apache2/mods-enabled/dirを編集することでした。 conf、DirectoryIndexを更新し、index.phpをindex.plの前に移動します。

5
Nicolae Bacrau

これをルートディレクトリに配置します。

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

<Directory "root">
    Options FollowSymLinks
    Options SymLinksIfOwnerMatch 
</Directory>
0
Adrian B