【问题标题】:How can a URL like http://localhost/index.php/articles/edit/1/my-first-article work without an .htaccess?如果没有 .htaccess,像 http://localhost/index.php/articles/edit/1/my-first-article 这样的 URL 如何工作?
【发布时间】:2010-11-01 07:14:39
【问题描述】:
【问题讨论】:
标签:
php
.htaccess
kohana
pathinfo
【解决方案1】:
来自Apache docs:
AcceptPathInfo 指令
该指令控制是否
包含尾随的请求
后面的路径名信息
实际文件名(或不存在的文件
在现有目录中)将是
接受或拒绝。尾随
可以制作路径名信息
可用于 PATH_INFO 中的脚本
环境变量。
例如,假设位置
/test/ 指向一个目录
仅包含单个文件
这里.html。然后请求
/test/here.html/more 和
/test/nothere.html/more 都收集
/more 为 PATH_INFO。
所以我假设这个设置在 httpd.conf 中的某个地方启用。请注意,这与 mod_rewrite 一样,可以在多个位置启用/配置 - see here。
【解决方案2】:
在 PHP 中,您可以使用 $_SERVER["PATH_INFO"] 变量获取文件名之后的数据。这允许您基本上 GET 信息而不必使用 GET 变量,这意味着 Google 和 co 会认为您使用的是静态页面。这基本上是mod_rewrite 的替代方案,后者通常启用,而mod_rewrite 通常不启用。
这对您来说可能很明显,但对我来说并不是很明显,除非您使用文件名,否则这在索引页面上无法正常工作。例如,http://example.com/test/my/get/params 将不起作用,而 http://example.com/test/index.php/my/get/params 将。
【解决方案4】:
我没有使用 Kohana,所以我不知道我的方法是否有用,但是当服务器不支持 .htaccess 文件(或重写规则)时,我的“框架”会生成如下所示的 URI:
http://www.domain.com/?/articles/edit/1/my-first-article(注意?)
这是Frog框架使用的类似方法,只是解析$_SERVER['REQUEST_URI'](或Windows服务器上的$_SERVER['HTTP-X-REWRITE-URL'])并在'/'上爆炸。
这种方法完全独立于重写,并且仍然生成或多或少对 SEO 友好的 URI
希望对你有用。
【解决方案5】:
这里可能不是这样,当然不推荐,也可能不是正确的答案...
但是...
我见过人们使用 404 页面来解析请求,然后在正确的页面中包含该信息。