私が経験していたエラー(Forbidden You don't have permission to access / on this server.)は、ファイル システムの問題ではなく、新しいサイトのルート フォルダーの場所が間違っていたことが原因でした。~/public_html_3.0/public_html/
間違って解凍したため、新しいサイトは実際には にありました。配置した新しいシンボリックリンクはpublic_html => public_html_3.0
、インデックスファイルのないフォルダーを指していたため、エラーが発生しました。
代替ソリューション
Leo Prince の答えは正しいですが、単一コマンド スイッチを使用した代替ソリューションを提供します。
このソリューションでは、サーバーまたはこの特定の VirtualHost に対して FollowSymlinks を有効にする必要があり、仮想ホストが /home/user/public_html (~/public_html) を指していると想定しています。許可/所有権の説明については、受け入れられた回答を参照してください。
古いサイトが に~/public_html
あり、新しいサイトが にあるとします~/app2
。
-public_html
-index.html
-other.html
-app2
-index.html
-other_new.html
まず、古いサイトを新しいディレクトリにコピーします。
# mkdir app1
# cp -a public_html/. app1/.
// -a option copies recursively with permissions/owners/groups
// but doesn't follow symbolic links
次に、public_html を一時ディレクトリに移動 (名前変更) し、public_html から古いアプリへのシンボリック リンクを作成します。
# mv public_html public_html_bak
// moves the public_html "out of way"
# ln -s app1 public_html
// creates a symbolic-link
# ls -l
drwxr-x--- user nobody app1/
drwxr-x--- user nobody app2/
lrwxr-x--- user nobody public_html -> app1/
drwxr-x--- user nobody public_html_bak/
これにより、~/public_html POINT が ~/app1 になります。詳しくは、シンボリック リンクを参照してください。サーバーは public_html を認識しますが、ファイルは app1 からのものです。
うまくいかない場合は、以前の状態に戻ります。
# rm public_html
//// use rm, NOT rmdir, since it's a symlink, not a dir
# mv public_html_bak public_html
// return backup to previous location
それが機能する場合、新しいサイト (app2) に切り替えたい瞬間に、シンボリック リンクを app2 ディレクトリを指すように変更する必要があります。
# rm public_html; ln -s app2 public_html
// remove existing link, create new link with a single line (instant change)
# ls -l
drwxr-x--- user nobody app1/
drwxr-x--- user nobody app2/
lrwxr-x--- user nobody public_html -> app2/
drwxr-x--- user nobody public_html_bak/
これは、フォルダーの名前を 2 回続けて変更するのとほぼ同じですが、アプリのバージョンを明確に確認することができます。これは、私が達成しようとしていることです。
# ls -l
drwxr-x--- user nobody app2.3/
drwxr-x--- user nobody app3.0/
drwxr-x--- user nobody app3.1/
drwxr-x--- user nobody app3.2b/
lrwxr-x--- user nobody public_html -> app3.0/ <- the current active version
# rm public_html; ln -s app3.1 public_html
/// a one-line switch to a different app version
/// first remove the symbolic link; then create new
もちろん、上記の受け入れられた回答で説明されているように、すべてのアプリディレクトリに適切な権限が必要であり、ディレクトリの所有者: グループは元の public_html と同じでなければなりません。また、サーバー構成で同じユーザーからのシンボリック リンクのみが許可されている場合、シンボリック リンクは同じユーザー: グループに属している必要があります。
シンボリック リンクを削除するには、実際のディレクトリを削除しようとすると失敗するためrm
、 ではなくを使用する必要があることに注意してください。rmdir
私はまだ *NIX を学んでいるので、この解決策には私が気付いていない問題があるかもしれません。しかし、頻繁なバージョン変更の場合、これは魔法のように機能します:)