交换public_html文件夹以便快速更改网站

时间:2013-07-13 11:36:02

标签: cpanel vps whm public-html

我有两个版本的网站,我必须多次快速交换。

在我的主目录中,我有:

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拥有新网站。

我希望通过以下方式替换这两个:

//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 

在测试帐户上尝试后,我收到禁止您无权访问/在此服务器上。错误。

我已确保public_html_ * 文件夹具有相同的权限,但我想这是一个符号链接问题?我是不是想做一些不可想象的事情而且不推荐?

在CentOs 5.9上使用具有root权限的VPS WHM / Cpanel。

修改

经过一些网络阅读后,我删除了public_html(移至临时)和sym链接的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/

结果仍然相同。

2 个答案:

答案 0 :(得分: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 {} \;   找到/home/user/public_html_3.0/-type f -exec chmod -R 644 {} \;

     

find / 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。如果有帮助,请告诉我们。

答案 1 :(得分:1)

我遇到的错误(禁止您无权访问/在此服务器上。)是新网站的错误放置的根文件夹,而不是文件系统问题。新网站实际上位于~/public_html_3.0/public_html/,因为我解压错了。我设置的新sym-link public_html => public_html_3.0现在指向没有索引文件的文件夹,因此出错。


替代解决方案

Leo Prince的回答是正确的,但我会提供一个单指令开关的替代解决方案,这也适用于我(解释像我这样的新手):

此解决方案要求您为服务器或此特定VirtualHost启用FollowSymlinks,并假定您的vhost指向/ 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。 Read more on symbolic links。服务器看到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/

虽然这与连续执行两个文件夹重命名大致相同,但它可以对应用程序版本进行全面检查,这正是我想要实现的目标:

# 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,所以我不知道这个解决方案可能存在一些问题。但是对于频繁的版本更改,这就像魔术一样:)