折腾了快一天,各种尝试,总算是搞通了万网的虚拟主机的一些设置和限制了。
- 万网的虚拟主机宿主操作系统应该用的是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 None
ExpiresActive On
ExpiresDefault "access plus 1 day"
RewriteEngine on
RewriteBase /
# Break rewrite loop condition
RewriteCond %{HTTP_HOST} ^万网主机名\.my3w\.com$ [OR]
RewriteCond %{HTTP_HOST} ^万网主机ip$ [OR]
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
# Redirect example.com to www.example.com
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]
# Rewrite all the other domains to self dir
RewriteRule ^(.*) %{HTTP_HOST}/$1 [DPI]
# Treat /
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ $1/ [DPI]
尽管apache支持不少批量虚拟主机的指令,比如VirtualDocumentRoot
,可惜不能写在.htaccess
,只能用Rewrite
。
为了便于自己调试,所以对于万网主机名和ip不进行URL重写,其余域名绑定过来的一律走htdocs/%{HTTP_HOST}
。
对于某些域名,如果希望控主机头跳转到www
,就用中间那段配置即可:
# Redirect example.com to www.example.com
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]
最后,只要把你的网站扔到htdocs/%{HTTP_HOST}
即可。