我在.htaccess
中有以下字符串:
https://www.example.com/index.php?language=french
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
这是我期望的输出:
https://altwww.example.com/index.php?language=french
RewriteCond %{HTTP_HOST} ^altwww.example.com [NC]
RewriteRule ^(.*)$ http://altwww.example.com/$1 [L,R=301]
我已经试过了:
old_domain="https?://www"
new_domain="https?://altwww"
sed -i -e "s/${old_domain}/${new_domain}/g" /path/to/my/.htaccess
可以使用
old_domain='(https?://)(https?://)?www'
new_domain='1altwww'
old_domain2='(^)(altwww.)?([[:alnum:]][^ ]*.com)'
new_domain2='1altwww.3'
sed -i -E "s/${old_domain}/${new_domain}/g;s/${old_domain2}/${new_domain2}/g" /path/to/my/.htaccess
-E
选项启用POSIX ERE语法。
(https?://)(https?://)?www
模式匹配并捕获到组1http://
或https://
,然后再匹配一个可选的http://
或https://
(以避免重复),然后匹配www
。替换的1altwww
用第1组的内容和附加的www
替换匹配。
第二个命令查找^
(捕获到组1),后跟一个可选的altwww.
字符串(组2),然后有一个字母数字字符,零个或多个非空格字符,然后是捕获到组3(与(^)(altwww.)?([[:alnum:]][^ ]*.com)
)的.com
,并替换为组1值+altwww.
+组3值。
查看在线演示
这似乎适用于所有情况:
sed -e 'sN(http(s|)://www.|)example.comN1altwww.example.comN' .htaccess
旧的无效答案:此命令将http[s]://www.example.com的所有出现更改为主机altwwww:
sed -e 'sN(https?://)wwwN1altwwwN' .htaccess
但是如果你想改变www.example.com的所有出现,你可以使用
sed -e 'sNexample.comNaltwww.example.comN' .htaccess