Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 使用命令行更改文档根目录_Apache_Ubuntu_Amazon Web Services_Command Line_Stack - Fatal编程技术网

Apache 使用命令行更改文档根目录

Apache 使用命令行更改文档根目录,apache,ubuntu,amazon-web-services,command-line,stack,Apache,Ubuntu,Amazon Web Services,Command Line,Stack,我正在设置一个Amazon Web服务堆栈,我想在/etc/apache2/sites enabled/000-default.conf中配置文档根目录,我目前通过修改文档的DocumentRoot来实现这一点。然后,我在/etc/apache2/apache2.conf中反映这一变化。是否可以使用命令行进行这些更改,而不是打开和编辑文件?提前感谢。您可以使用sed来完成。我使用以下包装器函数,以使其更方便: replace_string () { while :; do

我正在设置一个Amazon Web服务堆栈,我想在/etc/apache2/sites enabled/000-default.conf中配置文档根目录,我目前通过修改文档的DocumentRoot来实现这一点。然后,我在/etc/apache2/apache2.conf中反映这一变化。是否可以使用命令行进行这些更改,而不是打开和编辑文件?提前感谢。

您可以使用sed来完成。我使用以下包装器函数,以使其更方便:

replace_string () {
    while :; do
        case $1 in
               file=?*) local    file=${1#*=} ;;
            replace=?*) local replace=${1#*=} ;;
               with=?*) local    with=${1#*=} ;;
                     *) break                 ;;
        esac
        shift
    done

    sudo sed -i -- "s/$replace/$with/ig" $file
}

replace_string    file='/etc/apache2/sites-enabled/000-default.conf' \
               replace='.*DocumentRoot.*' \
                  with='DocumentRoot path-to-your-document-root'


replace_string    file='/etc/apache2/apache2.conf' \
               replace='.*DocumentRoot.*' \
                  with='DocumentRoot "path-to-your-document-root"'
请注意,运行此脚本的用户应该能够在没有密码的情况下使用sudo

如果您有httpd.conf文件 我不知道文档是否支持这一点(我看不到对它的引用),但我发现追加将取代以前的指令

在对通常伴随此类问题的
sed
grep
awk
脚本的共同声音感到失望后,我在实验中偶然发现了这一点(请参阅)

在我的例子中,我有一个名为
httpd_changes.conf
的文件,如下所示:

DocumentRoot "/my/new/web/dir"
<Directory "/my/new/web/dir">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
如果您没有httpd.conf文件
这不是我的情况,但据我所知,您可以在
conf.d
目录中放置一个新的配置文件。这些文件是按字母顺序读取的(根据本页),这显然比我的hack要好得多。

您可以尝试以下方法:

sed“s,/var/www/html,/my/new/web/dir,g”/etc/apache2/sites enabled/000 default.conf

这将显示对文件所做的修改

用作自定义分隔符,使正则表达式更易于阅读。 此示例使用将所有出现的
/var/www/html
替换为
/my/new/web/dir

添加
-i
标志以实际修改文件:


sed-i“s,/var/www/html,/my/new/web/dir,g”/etc/apache2/sites enabled/000 default.conf

是的,您必须使用命令行编辑器来编辑文件,比如“nano”使用vimhorrendous@quant我讨厌bash,喜欢ruby,所以我有一个完整的“框架”这样的函数。
cat httpd_changes.conf >> /etc/apache2/httpd.conf