【问题标题】:Bash script to enable mod_rewrite AllowOverride All启用 mod_rewrite AllowOverride All 的 Bash 脚本
【发布时间】:2014-07-04 01:15:44
【问题描述】:

我正在远离 AMPPS / MAMP,并希望构建一个尽可能接近生产环境的开发环境。

因此,我在安装了 CentOS 6.4 64 位操作系统的 Mac 上使用 Vagrant / VirtualBox。

在我的 vagrant 文件中,我有一个配置脚本:

config.vm.provision :shell, :path => "bootstrap.sh"

目前,我的 bootstrap.sh 如下所示:

#!/usr/bin/env bash

# Install the remi repos
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

# Update the repositories
sudo yum -y update

sudo yum -y --enablerepo=remi,remi-php55 install php-pecl-apc php-cli php-pear php-pdo php-mysqlnd php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml

现在我已经安装了我的 apache 服务器,我希望我的 bash 脚本编辑 /etc/httpd/conf/httpd.conf 文件并将我的 html 目录中的 AllowOverride None 更改为 AllowOverride All

<Directory "/var/www/html">

...

    Options Indexes FollowSymLinks

...

    # Need to change this to AllowOverride All via bash script
    AllowOverride None

...

    Order allow,deny
    Allow from all

</Directory>

【问题讨论】:

标签: linux apache bash mod-rewrite


【解决方案1】:

使用 Linux SED 命令搜索和替换两个模式之间的一行

另一个不错的解决方案是使用 SED 命令来搜索和替换两个模式之间的行。在您的情况下,模式将是:

'<Directory "/var/www/html">' and </directory>'

这样您只替换 html 目录 (&lt;Directory "/var/www/html"&gt;) 中的“AllowOverride None”行,而不是 httpd.conf 文件中包含“AllowOverride None”的每一行。

SED 命令支持这种形式的模式范围:

sed '/startpattern/,/endpattern/ <sed-commands>' file

在你的情况下,这变成:

sed -i '/<Directory "\/var\/www\/html">/,/<\/Directory>/ s/AllowOverride None/AllowOverride all/' /etc/httpd/conf/httpd.conf

-i 选项用于就地编辑文件。如果不使用选项-i,那么修改后的输出将打印在屏幕上,文件不会被修改!

【讨论】:

  • 这正是我想要的!
  • 我的情况(apache 2.4)你不需要引号sed -i '/&lt;Directory \/var\/www\/&gt;/,/&lt;\/Directory&gt;/ s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
【解决方案2】:

这是一个不错的单行线:

sed "$(grep -n "AllowOverride None" input.file |cut -f1 -d:)s/.*/AllowOverride All/" input.file > output.file

关于细分:

  • grep -n "AllowOverride None" input.file 返回匹配模式的行,前面是行号
  • cut -f1 -d: 剪切字符串并返回它遇到的第一个数字
  • sed "$LINE_NUMBERs/.*/AllowOverride All/" input.file 将“AllowOverride All”放在第 n° 行 $LINE_NUMBER

然后你只需要将输出重定向到你想要的文件。

瞧!

【讨论】:

    猜你喜欢
    • 2014-08-21
    • 2015-09-12
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2017-01-25
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多