像http://localhost/index.php/articles/edit/1/my-first-article这样的URL如何在没有.htaccess的情况下工作?

时间:2009-06-08 20:45:25

标签: php .htaccess kohana pathinfo

我不明白:

http://localhost/index.php/articles/edit/1/my-first-article

Kohana framework documentation中提到了此URL作为示例。我在我的安装文件中捅了一下,除了我自己的那个与之无关的.htaccess之外没有.htaccess。

那么,如何调用index.php然后,作为参数,这些东西看起来像添加到URL的目录?这看起来并不“真实”。

或者这只是本机PHP / Apache / HTTP的实际工作原理?据我所知,/总是说“嘿,一个目录!”。对我来说真的没有意义......怎么可能?或者他们有一个我无法看到/找到的.htaccess?

6 个答案:

答案 0 :(得分:10)

来自Apache docs

  

AcceptPathInfo指令

     

该指令控制是否   包含尾随的请求   跟随的路径名信息   实际文件名(或不存在的文件   在一个现有的目录中)将   接受或拒绝。尾随   可以制作路径名信息   可用于PATH_INFO中的脚本   环境变量。

     

例如,假设位置   / test /指向一个目录   仅包含单个文件   here.html。然后请求   /test/here.html/more和   /test/nothere.html/more都收集   /更多为PATH_INFO。

所以我假设在httpd.conf中启用了这个设置。请注意,这可以像mod_rewrite一样在许多地方启用/配置 - see here

答案 1 :(得分:2)

在PHP中,您可以使用$_SERVER["PATH_INFO"]变量获取文件名后面的数据。这使您基本上可以获取信息而无需使用GET变量,这意味着Google和co会认为您正在使用静态页面。这基本上是mod_rewrite的替代方案,通常会启用,而mod_rewrite通常不会启用。

这对您来说可能是显而易见的,但它并不是立即对我而言,除非您使用文件名,否则它在索引页面上无法正常工作。例如,http://example.com/test/my/get/params将不起作用,而http://example.com/test/index.php/my/get/params将会起作用。

答案 2 :(得分:1)

为您的服务器启用了

AcceptPathInfo。 :)

答案 3 :(得分:1)

我没有使用Kohana,所以我不知道我的方法是否会有用,但是当服务器不支持.htaccess文件(或重写规则)时,我的'framework'会生成这样的URI:

http://www.domain.com/?/articles/edit/1/my-first-article(请注意?)

这是Frog框架使用的类似方法,只需解析$_SERVER['REQUEST_URI'](或Windows服务器上的$_SERVER['HTTP-X-REWRITE-URL'])并在'/'上爆炸。

此方法完全独立重写,仍会生成或多或少的SEO友好URI

希望它对你有用。

答案 4 :(得分:0)

可能不是这里的情况,当然不推荐,也可能不是正确答案......

但是......

我看到人们使用404页面来解析请求,然后在页面中包含该信息。

答案 5 :(得分:0)

请参阅CGI Environment Variables中的PATH_INFO。