所以凡是使用linux的主机,我都会定义个301重定向,以利于seo。昨天照例把htaccess传到服务器上,没想到传上后网站无法访问,一删除就恢复正常。看了很多遍代码,也没发现什么问题。 干脆就重新学习下url重写方法。
规范化url
描述:
在有些web服务器上,一个资源会拥有多个url。在实际应用和发布中应该使用的是规范的url,其他的则是简写或者只在内部使用。无论用户在请求中使用什么形式的url,最终看见的都应该是规范的url。
解决方案:
对所有不规范的url执行一个外部http重定向,以改变它在浏览器地址栏中的显示及其后继请求。下例中的规则集用规范的/u/user替换/~user,并修正了/u/user所遗漏的后缀斜杠。
rewriterule ^/~([^/]+)/?(.*) /u/$1/$2 [r]
rewriterule ^/([uge])/([^/]+)$ /$1/$2/ [r]

规范化主机名

描述:
这个规则的目的是强制使用特定的主机名以代替其他名字。比如,你想强制使用www.example.com代替example.com,就可以在以下方案的基础上进行修改:
解决方案:
对运行在非80端口的站点

rewritecond %{http_host} !^fully\.qualified\.domain\.name [nc]
rewritecond %{http_host} !^$
rewritecond %{server_port} !^80$
rewriterule ^/(.*) http://fully.qualified.domain.name:%{server_port}/$1 [l,r]

对运行在80端口的站点

rewritecond %{http_host} !^fully\.qualified\.domain\.name [nc]
rewritecond %{http_host} !^$
rewriterule ^/(.*) http://fully.qualified.domain.name/$1 [l,r]

 

参考了上面的规则,发现自己原先的代码里少了个!号,加上就恢复正常了。
options +followsymlinks
rewriteengine on
rewritecond %{http_host} !^do-javascript.com [nc]
rewritecond %{http_host} !^$
rewriterule ^/(.*) http://www.do-javascript.com/$1 [r=301,nc]