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:这条语句在本地成功。

解决方案 »

  1.   

    你的理解上有点问题默认首页是index.php
    是这样的一个机制,当接收到访问一个目录的时候(下面我们分析/做为访问根目录时的处理),去尝试寻找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错
      

  2.   

    RewriteRule Pattern Substitution [flags]
    Pattern是一个作用于当前URL的perl兼容的正则表达式。"当前URL"是指该规则生效时刻的URL的值。它可能与被请求的URL截然不同,因为其他规则可能在此之前已经发生匹配并对它做了改动。不知道是不是apache的版本问题。我这一条rewrite语句在其它4个虚拟主机上运行良好,但唯独现在这一款(第5)虚拟主机上不能运行
      

  3.   

    因为一直我匹配数字都用(\d+)但发现其中一个虚拟主机上的\d+不能运行。就是因为版本问题。结果改用([0-9]+) 所以我也怀疑是版本问题。但首页必须重写。也必须只重写index.php....怎么办。。
      

  4.   

    htaccess用得比较少。现在百度/GOOGLE的引擎都直接支持动态页面ASP,PHP扩展名的了。所以这方面研究的人也渐渐少了。所以研究技术,不能只为技术而技术,更多的时候还得考虑应用价值!是否这么做值得。
      

  5.   


    你理解错误了,这个当前URL的解释是说:因为其他规则可能在此之前已经发生匹配并对它做了改动,所以"当前URL"才可能与被请求的URL截然不同如果说那4个规则一致的话,你可以验证下是否对方的虚拟机是否启用了,/ rewrite 到 /index.php 重写规则不过你可以这样RewriteRule ^/?(index\.php)?$ /index.php?plugin=article&paction=ListPage [L]