折腾了快一天,各种尝试,总算是搞通了万网的虚拟主机的一些设置和限制了。万网的虚拟主机宿主操作系统应该用的是CentOS 6(从php探针中拿到的内核版本确定的)apache版本应该是2.2。cento
折腾了快一天,各种尝试,总算是搞通了万网的虚拟主机的一些设置和限制了。
- 万网的虚拟主机宿主操作系统应该用的是CentOS 6(从php探针中拿到的内核版本确定的)
- apache版本应该是2.2。centos6官方仓库带的版本就是2.2,在加上不支持Require all granted这种在2.4才有的配置
- 启用了
AllowOverride
选项,所以允许在htdocs
下放一个.htaccess
明白了这些限制之后,大致就知道.htaccess
应该怎么写了。写之前务必确认你的指令可以工作在.htaccess
,以及被apache 2.2支持。
已经一年都没玩过apache的配置了,2.2版本的配置都快忘光了,各种google查文档,七拼八凑之后最后贴配置:
FileETag NoneExpiresActive OnExpiresDefault "access plus 1 day"RewriteEngine onRewriteBase /# Break rewrite loop conditionRewriteCond %{HTTP_HOST} ^万网主机名/.my3w/.com$ [OR]RewriteCond %{HTTP_HOST} ^万网主机ip$ [OR]RewriteCond %{ENV:REDIRECT_STATUS} 200RewriteRule ^ - [L]# Redirect example.com to www.example.comRewriteCond %{HTTP_HOST} ^example/.com$RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]# Rewrite all the other domains to self dirRewriteRule ^(.*) %{HTTP_HOST}/$1 [DPI]# Treat /RewriteCond %{REQUEST_URI} !/$RewriteCond %{REQUEST_FILENAME} -dRewriteRule ^(.*)$ $1/ [DPI]
尽管apache支持不少批量虚拟主机的指令,比如VirtualDocumentRoot
,可惜不能写在.htaccess
,只能用Rewrite
。
为了便于自己调试,所以对于万网主机名和ip不进行URL重写,其余域名绑定过来的一律走htdocs/%{HTTP_HOST}
。
对于某些域名,如果希望控主机头跳转到www
,就用中间那段配置即可:
# Redirect example.com to www.example.comRewriteCond %{HTTP_HOST} ^example/.com$RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]
最后,只要把你的网站扔到htdocs/%{HTTP_HOST}
即可。