打开了 Apache 的 Rewrite 模块,想对一个本地的 Apache 虚拟主机进行一下 URL 重写,测试一下功能:
虚拟主机的配置子文件被包含在了主 Apache 配置文件里:
主配置文件(D:\usr\local\apache2\conf\httpd.conf):
# 包含 phpweb20 虚拟主机配置文件 Include D:/usr/webroot/Zendphpweb20/httpd.conf
子配置文件(D:\usr\webroot\Zendphpweb20\httpd.conf):
#phpweb20 虚拟主机设置 <VirtualHost 127.0.0.2:80> ServerName phpweb20 DocumentRoot D:/usr/webroot/Zendphpweb20/htdocs <Directory D:/usr/webroot/Zendphpweb20/htdocs> AllowOverride All Options All </Directory> <IfModule rewrite_module> RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^/(.*)$ /index.php </IfModule> #修改 PHP 配置(可选) php_value include_path .;D:/usr/webroot/Zendphpweb20/include;D:/usr/local/php5/PEAR php_value magic_quotes_gpc off php_value register_globals off </VirtualHost>
中间的 <IfModule> 块即为重写定义区域:
RewriteEngine On
开启 Apache Rewrite 模块;
RewriteCond %{SCRIPT_FILENAME} !-f
如果所请求的文件未对应到相对于 Web 根目录的某个文件,则使用重写规则;
RewriteCond %{SCRIPT_FILENAME} !-d
如果请求不存在的目录,则使用重写规则;
RewriteRule ^/(.*)$ /index.php
如果满足上述的两个条件之一,则执行此条重写规则;
---------------------------------------------------------------------以上似乎没有问题
可是当我删除 httpd.conf 中的 <IfModule> 块,把重写规则写入 .htaccess 文件里,并放在根目录下时,Apache 好像并没有理会 .htaccess 文件,重写失败!!不知道是为什么!是不是两个位置的重写规则有些差异还不知道呢?
望高人指导…Waiting..