在Apache虚拟主机中设置改写规则

因为之前使用Yii2.0进行一些开发工作,但是开发初期遇到了不少问题,其中一个就是关于Apache的虚拟主机中如何设置改写规则。
因为改写规则需要写在<Directory>...</Directory>之间,但是配置在$path/Apache2/extra/httpd-vhosts.conf中是以如下格式配置的:

1
2
3
4
5
6
<VirtualHost *:80>
DocumentRoot "/Users/user_name/Sites"
ServerName mysites
ErrorLog "/private/var/log/apache2/dummy-host.example.com-error_log"
CustomLog "/private/var/log/apache2/dummy-host.example.com-access_log" common
</VirtualHost>

那么添加改写规则则是在<VirtualHost>中加入<Directory>规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<VirtualHost *:80>
ServerName blog.com
DocumentRoot "/Users/user_name/Sites/blog/frontend/web"
<Directory "/Users/user_name/Sites/blog/frontend/web">
# 开启 mod_rewrite 用于美化 URL 功能的支持(译注:对应 pretty URL 选项)
RewriteEngine on
# 如果请求的是真实存在的文件或目录,直接访问
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 如果请求的不是真实文件或目录,分发请求至 index.php
RewriteRule . index.php
# ...其它设置...
</Directory>
</VirtualHost>

需要注意的是,还需要到$path/apache2/httpd.conf中开启mod_rewrite功能(把前面的#去除掉,#代表注释该行代码)。