我估计是php.in的配置问题,也可能是apache的.htaccess的配置不对,请指点。

解决方案 »

  1.   

    不是吧?
    http://www.xx.com/shop/hat
    当php作为Apache的module时 也会当路径解释的!至少需要
    http://www.xx.com/index.php/shop/hat

    http://www.xx.com/index/shop/hat除非你存在shop.*的文件
      

  2.   

    感谢你的回复。
    原来在module下http://www.xx.com/shop/hat是可以的,后来服务器升级,从module模式转变为CGI模式,就不行了。
    有没有办法让所有的url都被index.php处理,但是不必写成.../index.php?a=shop&b=hat
      

  3.   

    检查 PATH_INFO 是否被启用,apahe2默认不启用
      

  4.   

    谢谢回复。PATH_INFO是php.ini的配置项吗?我只找到了 cgi.fix_pathinfo。 将 cgi.fix_pathinfo设为1后仍然不行。
      

  5.   

    httpd.confUseCanonicalName On -> Off
      

  6.   

    非常感谢。
    我搜索了一下,发现以下说明:
    AcceptPathInfo指令的三个参数为:off
    仅当一个请求映射到一个真实存在的路径时,它才会被接受。这样,如上述/test/here.html/more这样的在真实文件名后跟随一个路径名的请求将会返回一个404 NOT FOUND错误。 
    on
    如果前面的路径映射到一个真实存在的文件,此请求将被接受。如果/test/here.html映射着一个有效的文件,上例中/test/here.html/more这个请求就会被接受。 
    default
    对于附加路径名的请求的处理方式由其对应的处理器来决定。对应普通文本的核心处理器默认会拒绝PATH_INFO。而用于伺服脚本的处理器,比如cgi-script和isapi-isa,默认会接受PATH_INFO。 如果将其置为off,还是不能保证用index.php来处理http://www.xx.com/shop/hat这样的url吧。在index.php中有对url进行解析和映射到真实脚本的语句,现在需要保证任何url都会被index.php处理。服务器在国外,因此不能马上测试。我会尽快测试,同时请您继续对我上面的看法发表意见和建议。谢谢。
      

  7.   

    resolved! Cheers :)http://bugs.php.net/bug.php?id=23800Change cgi.fix_pathinfo to 0. What a supprise!Thanks alot.