RewriteCond %{QUERY_STRING} ^$
RewriteRule ^index.php$ index.php?plugin=article&paction=ListPage [L]上边是一句重写语句。本意是。如果没有传参数。并且访问的是index.php就重写以传参。按我的想法如果我访问http://www.xx.com/就会执行重写。
但在服务器上没有成功。只有访问http://www.xx.com/index.php才重写成功。但默认首页是index.php.为什么会这样?既然默认首页是index.php
我访问http://www.xx.com/不就是访问默认首页莫?ps:这条语句在本地成功。
RewriteRule ^index.php$ index.php?plugin=article&paction=ListPage [L]上边是一句重写语句。本意是。如果没有传参数。并且访问的是index.php就重写以传参。按我的想法如果我访问http://www.xx.com/就会执行重写。
但在服务器上没有成功。只有访问http://www.xx.com/index.php才重写成功。但默认首页是index.php.为什么会这样?既然默认首页是index.php
我访问http://www.xx.com/不就是访问默认首页莫?ps:这条语句在本地成功。
是这样的一个机制,当接收到访问一个目录的时候(下面我们分析/做为访问根目录时的处理),去尝试寻找index指定的文件我们来看下RewriteRule的说明RewriteRule Pattern Substitution [flags]
Pattern是一个作用于当前URL的perl兼容的正则表达式。"当前URL"是指该规则生效时刻的URL的值。它可能与被请求的URL截然不同,因为其他规则可能在此之前已经发生匹配并对它做了改动。
http://www.xx.com/访问的时候,“当前URL”是http://www.xx.com/针对于“RewriteRule ^index.php$ index.php?plugin=article&paction=ListPage [L]”这个规则来说,根本不能匹配,所以就直接忽略这个正则了接下来就是apaceh DirectoryIndex机制了,如 DirectoryIndex index.php index.html则apache回去分别尝试判断 /index.php 和 /index.html是否存在,存在则直接去调用文件(或者交给cgi处理),不存在就要往下走,例如目录是否可以列出内容或者报404错
Pattern是一个作用于当前URL的perl兼容的正则表达式。"当前URL"是指该规则生效时刻的URL的值。它可能与被请求的URL截然不同,因为其他规则可能在此之前已经发生匹配并对它做了改动。不知道是不是apache的版本问题。我这一条rewrite语句在其它4个虚拟主机上运行良好,但唯独现在这一款(第5)虚拟主机上不能运行
你理解错误了,这个当前URL的解释是说:因为其他规则可能在此之前已经发生匹配并对它做了改动,所以"当前URL"才可能与被请求的URL截然不同如果说那4个规则一致的话,你可以验证下是否对方的虚拟机是否启用了,/ rewrite 到 /index.php 重写规则不过你可以这样RewriteRule ^/?(index\.php)?$ /index.php?plugin=article&paction=ListPage [L]