わかりましたので、私は以前に2つの仮想ホストをセットアップしましたが、それらはクールに動作しています。どちらもシンプルなWebプロジェクトを格納し、ブラウザのhttp://project1
およびhttp://project2
で正常に動作します。
とにかく、私は別の仮想ホストを追加するようになりました。/etc/hostsファイルを127.0.0.1 project3で編集し、project2の以前のエントリをコピーして貼り付け、ファイルパスを編集して、httpd-vhosts.confファイルも更新しました。
すべてのファイルとフォルダーのアクセス許可を確認し(実際、project2からコピーして貼り付けました)、単に "hello world"メッセージをindex.phpファイルに入れました。
http://project3
にアクセスすると、403許可されていない許可拒否メッセージが表示されます
これがなぜなのか、すべてが正しく設定されているように見えるので、私が見逃したステップを見つけることができます。
前もって感謝します。
それを確認します :
さらに、error.logファイル(通常は/var/log/Apache2/error.logにあります)を見ると、403エラーが発生した理由が正確に説明されています。
最後に、すべての構成が適用されていることを確認するために、Apacheを再起動することもできます。これは通常、/etc/init.d/Apache2 restart
。一部のシステムでは、スクリプトはhttpdと呼ばれます。把握してください。
数日間苦労した後、この問題を修正しました。ここに私のために働いたものがあります:
まず、Apache error_log
ファイルを確認し、最新のエラーメッセージを確認します。
次のような場合:
access to /mySite denied (filesystem path
'/Users/myusername/Sites/mySite') because search permissions
are missing on a component of the path
ファイルのアクセス許可に問題があります。ターミナルから次のコマンドを実行することで修正できます:
$ cd /Users/myusername/Sites/mySite
$ find . -type f -exec chmod 644 {} \;
$ find . -type d -exec chmod 755 {} \;
次に、WebサイトのURLを更新します(http://localhost/mySite
など)。それでも403エラーが発生し、Apache error_log
が同じことを言っている場合は、ディレクトリツリーを上に移動し、ディレクトリのアクセス許可を調整します。これは、ターミナルから次の方法で実行できます。
$ cd ..
$ chmod 755 mySite
必要に応じて、次の手順に進みます。
$ cd ..
$ chmod Sites
そして、必要に応じて、
$ cd ..
$ chmod myusername
DO NOTそれよりもさらに上に移動します。あなたのシステムを非常に混乱させる可能性があります。それでもsearch permissions are missing on a component of the path
というエラーが表示される場合は、どうすればよいかわかりません。ただし、次のように修正した別のエラー(以下のエラー)が発生しました。
error_log
が次のような場合:
client denied by server configuration:
/Users/myusername/Sites/mySite
問題はファイルのアクセス権ではなく、Apacheの構成にあります。
httpd.conf
ファイルには、次のようなデフォルト設定が表示されます(Apache 2.4+):
<Directory />
AllowOverride none
Require all denied
</Directory>
またはこのように(Apache 2.2):
<Directory />
Order deny,allow
Deny from all
</Directory>
しないでくださいこれを変更してください!これらの許可をグローバルにオーバーライドするのではなく、httpd-vhosts.conf
ファイルでオーバーライドします。ただし、最初に、httpd.conf
のvhost Include
行がコメント解除であることを確認してください。次のようになります。 (正確なパスは異なる場合があります。)
# Virtual hosts
Include etc/extra/httpd-vhosts.conf
次に、Include
dだけを追加したhttpd-vhosts.conf
ファイルを開きます。 Webページのエントリがまだない場合は追加します。次のようになります。 DocumentRoot
とDirectory
のパスは同一である必要があり、index.html
またはindex.php
ファイルがある場所を指している必要があります。私にとっては、それはpublic
サブディレクトリ内にあります。
Apache 2.2の場合:
<VirtualHost *:80>
# ServerAdmin [email protected]
DocumentRoot "/Users/myusername/Sites/mySite/public"
ServerName mysite
# ErrorLog "logs/dummy-Host2.example.com-error_log"
# CustomLog "logs/dummy-Host2.example.com-access_log" common
<Directory "/Users/myusername/Sites/mySite/public">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
言っている行
AllowOverride All
Require all granted
apache 2.4+にとって重要です。これらがなければ、httpd.conf
で指定されたデフォルトのApache設定を上書きしません。 Apache 2.2を使用している場合、これらの行は代わりに言う必要があることに注意してください
Order allow,deny
Allow from all
この変更は、Apache 2.2行をコピーアンドペーストしてもApache 2.4+では機能せず、Apache 2.2行は依然として古いヘルプスレッドで見られるため、Iなどのこの問題のGoogleにとって大きな混乱の原因となっています。
変更を保存したら、Apacheを再起動。このコマンドはOSとインストールに依存するため、ヘルプが必要な場合は個別にGoogleで検索してください。
これが他の誰かに役立つことを願っています!
PS:これらの.conf
ファイルが見つからない場合は、次のようなfind
コマンドを実行してみてください。
$ find / -name httpd.conf
restorecon
コマンドは次のように機能します。
restorecon -v -R /var/www/html/
サーバーには、ホームディレクトリとその中の.htaccessの読み取り許可が必要な場合があります
次のコマンドを使用して、selinuxを無効にしてからもう一度試すことができます。
setenforce 0
私の場合、ソースサーバーのIPがターゲットサーバーでホワイトリストに登録されていなかったため、失敗していました。
例えばソースサーバーで実行されているアプリケーションから https://prodcat.ref.test.co.uk にアクセスしようとしていました。送信元サーバーでifconfigによってIPを見つけます
このIPは、ターゲットサーバーのApache構成ファイルでホワイトリストに登録する必要があります。そうでない場合は、ホワイトリストを取得します。
ホワイトリストにIPを追加する手順(ターゲットサーバーも制御する場合)sshをApacheサーバーにSudo su-cd/usr/local/Apache/conf/extra(実際のディレクトリは設定に応じて異なる場合があります)
たとえば、ターゲットアプリケーションの構成ファイルを見つけます。 prodcat-443.conf
RewriteCond %{REMOTE_ADDR} <YOUR Server's IP>
for e.g.
RewriteCond %{REMOTE_ADDR} !^192\.68\.2\.98
これが誰かを助けることを願って