1

私はサイトの 2 つのバージョンを持っており、それらを何度もすばやく交換する必要があります。

私のホームディレクトリには、次のものがあります。

drwxr-x---  8 lorem  nobody      4096 Jul 12 20:50 public_html/
drwxr-x---  3 lorem  nobody      4096 Jul 13 12:59 public_html_3.0/

public_html現在のウェブサイトをpublic_html_3.0保持し、新しいウェブサイトを保持します。

私は次のようにして2つを置き換えたい:

//move the complete current site to another tmp location
mv public_html public_html_2.0 
//move the new site in place
mv public_html_3.0 public_html 

テスト アカウントで試したところ、Forbidden You do not have permission to access / on this server が表示されます。エラー。

public_html_ *フォルダーに同一のアクセス許可があることを確認しましたが、シンボリックリンクの問題だと思いますか? 考えられないことや、強く推奨されないことをしようとしていますか?

CentOs 5.9 で root 権限で VPS WHM/Cpanel を使用。

編集

いくつかの Webreading の後、削除public_html(temp に移動) し、シンボリック リンクを作成すると、次のようpublic_html -> public_html_3.0になります。

lrwxrwxrwx  1 lorem nobody           15 Jul 13 14:11 public_html -> public_html_3.0/
drwxr-x---  3 lorem nobody      4096 Jul 13 12:59 public_html_2.0/
drwxr-x---  2 lorem nobody      4096 Jul 13 14:02 public_html_3.0/
lrwxrwxrwx  1 lorem lorem            11 Jul  9  2012 www -> public_html/

それでも同じ結果です。

4

2 に答える 2

1

私が経験していたエラー(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 を学んでいるので、この解決策には私が気付いていない問題があるかもしれません。しかし、頻繁なバージョン変更の場合、これは魔法のように機能します:)

于 2013-07-16T20:41:24.523 に答える
1

上記のように public_html を移動することは大きな問題ではありません。

mv public_html public_html_2.0 mv public_html_3.0 public_html

実際に何をしているのかを認識している場合、これらは無害なコマンドです。

両方のディレクトリに 750 のアクセス許可があることを確認してください。

chmod 750 public_html*

次に、両方のディレクトリ内のファイルが正しい権限を持っていることを確認してください。

find /home/user/public_html/ -type f -exec chmod -R 644 {} \; find /home/user/public_html_3.0/ -type f -exec chmod -R 644 {} \;

/home/user/public_html/ を見つけます -type d -exec chmod -R 755 {} \; /home/user/public_html_3.0/ を見つけます -type d -exec chmod -R 755 {} \;

また、所有権も正しいことを確認してください。それらを再帰的に変更します

chown -R lorem: /home/user/public_html/* chown -R lorem: /home/user/public_html_3.0/*

suphp ハンドラーを使用している場合は、lorem:nobody も使用できます。それがあなたを助けたかどうか私たちに知らせてください。

于 2013-07-13T21:10:49.677 に答える