Ошибка, с которой я столкнулся (Forbidden У вас нет прав на доступ к этому серверу.) был неуместной корневой папкой нового сайта, а не проблемой файловой системы. Новый сайт был фактически расположен в ~/public_html_3.0/public_html/
, потому что я расстегнул его неправильно. Новая сим-ссылка, которую я установил, public_html => public_html_3.0
, теперь указывала на папку без индексного файла, следовательно, на ошибку.
Альтернативное решение
ответ
Лео принца является правильным, но я предлагаю альтернативное решение с одной командой переключателем, который также работал для меня (объяснение для newbs как я):
Это решение требует, чтобы для сервера или данного конкретного виртуального хоста были включены 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, но файлы из приложения 1.
Если это не работает, вернитесь к предыдущему состоянию:
# 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, поэтому могут возникнуть некоторые проблемы с этим решением, о котором я не знаю. Но для частых изменений в версии это работает как magic :)
Спасибо, человек, это определенно сработает. Я потратил часы на цикл обучения learn => trial =>, и сам пришел к подобному документообороту. Опубликуйте мое решение ниже, но ваш - более глубокое представление о том, что происходит, и это здорово. –
Добро пожаловать, друг. :) –