原来以为这个问题很简单, Google了一下发现网上的答案五花八门, 而且版本很混乱 有httpd的, ASP.net, url redirect的, url rewrite的. 经过多次尝试各种组合, 终于试出了一个可行的解决方案, 值得在此记录一下, 相信一定能帮到有类似需求的人. 本文例子为Ubuntu + apache2, 2020年, 2021年左右.
普通URL redirect到另一个网站
编辑/etc/apache2/sites-available里面的一个site, 比如mysite, 需要redirect到anothersite.com, 那么可以加上一行Redirect
<VirtualHost *:80>
ServerAdmin webmaster@localhost
...
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /var/www/html/mysite
Redirect / http://anothersite.com
...
修改完成后保存, 重启apache2
sudo service apache2 restart
Redirect到一个子目录
上面的方法可以redirect到不同的URL, 但是如果想redirect mysite.com到mysite.com/blog就不行. 我试了一下, 如果像上面那样改动, 在浏览器输入mysite.com就会被不停的改成mysite.com/blog/blog/blog… 无限循环. 很明显, 改写是recursive的. 那么就不要用Redirect而是用RedirectMatch
<VirtualHost *:80>
ServerAdmin webmaster@localhost
...
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /var/www/html/mysite
RedirectMatch ^/$ /blog/
...
我也不太清楚apache2配置的语法细节, 但是以上是试过可行的方法. 最后一样是重启apache2让配置生效
sudo service apache2 restart