[英]Bash script to enable mod_rewrite AllowOverride All
我正在遠離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>
這是一個很棒的oneliner:
sed "$(grep -n "AllowOverride None" input.file |cut -f1 -d:)s/.*/AllowOverride All/" input.file > output.file
細分:
grep -n "AllowOverride None" input.file
返回與模式匹配的行, grep -n "AllowOverride None" input.file
是行號 cut -f1 -d:
剪切字符串並返回它遇到的第一個數字 sed "$LINE_NUMBERs/.*/AllowOverride All/" input.file
將“AllowOverride All”放在第n $LINE_NUMBER
然后,您只需將輸出重定向到所需的文件。
瞧瞧!
使用Linux SED命令搜索並替換兩種模式之間的一條線
另一個不錯的解決方案是使用SED命令搜索和替換兩個模式之間的一條線。 在您的情況下,模式將是:
'<Directory "/var/www/html">' and </directory>'
這樣,您只更換html目錄(<Directory "/var/www/html">)
中的'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選項,則修改后的輸出將打印在屏幕上,文件不會被修改!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.