漂亮的URL没有mod_rewrite,没有.htaccess

时间:2009-06-10 12:26:03

标签: php html url .htaccess mod-rewrite

没有可能访问.htaccess我发现自己陷入了创造性的僵局。 对我来说没有mod_rewriting。然而,我希望能够做到这样的好事:

http://www.example.com/Blog/2009/12/10/
http://www.example.com/Title_Of_This_Page

我的替代方案是什么?

回答答案:

  • 我正在用php5构建
  • 我无法访问.htaccess
  • http://www.example.com/index.php/Blog/是一种已知的技术,但我不喜欢它。显示php就这么说了。
  • 我如何创建无扩展的PHP文件?这可以解决这个问题吗?
  • 使用自定义404技术会对性能产生多大影响?

8 个答案:

答案 0 :(得分:11)

如果您拥有为服务器设置自定义错误文档的权限,则可以使用此权限重定向404请求。

E.g。对于Apache(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument

ErrorDocument 404 /index.php

在index.php中,您可以使用$ _SERVER数组中的数据继续处理您的请求。

答案 1 :(得分:7)

你也可以有像

这样的网址
http://domain.com/index.php/Blog/Hello_World

用PHP5开箱即用。然后,您可以使用

读取URL参数
echo $_SERVER['PATH_INFO'];

在使用应用程序之前,请记住验证/过滤PATH_INFO和所有其他请求变量。

答案 2 :(得分:5)

我知道这个问题很老但我没有看到其他人提出这个可能的解决方案......

您可以通过在网址的域名部分之后添加问号来获得您想要的内容,即;

http://www.example.com/?Blog/2009/12/10/
http://www.example.com/?Title_Of_This_Page

上述两个HTTP请求现在都由相同的PHP脚本处理;

www.example.com/index.php

index.php脚本中,上面两页的$_SERVER['REQUEST_URI']将分别为;

Blog/2009/12/10/

Title_Of_This_Page

所以你可以随意处理它们。

答案 3 :(得分:3)

一个非常简单的方法是:

  • .htaccess
  • 中声明404 ErrorDocument(例如PHP)
  • 使用$_SERVER解析查询,并查看它是否与任何结果相对应
  • 如果是,则使用header()将状态200替换为HTTP状态404并包括index.php

答案 4 :(得分:3)

如果省略尾部斜杠,Apache将按字母方式[按字母顺序]提供与该名称匹配的第一个文件,无论扩展名如何,至少在我有权访问的2台服务器上。

我不知道您如何使用它来解决您的问题,但在某些时候可能会有用。

例如,如果 http://www.somesite.com/abc.htmlhttp://www.somesite.com/abc.php都存在且http://www.somesite.com/abc已被请求,http://www.somesite.com/abc.html将被投放。

答案 5 :(得分:2)

唯一的方法是使用自定义404页面。您无法使用PHP解释器解释无扩展文件,而无需重新配置Web服务器的MIME类型。但是你说你甚至不能编辑.htaccess,所以别无选择。

答案 6 :(得分:1)

您可以编写一个URI类来解析您定义的用户友好的URL。

答案 7 :(得分:0)

如果启用了MultiViews选项,或者您可以说服拥有密钥的人启用它,您可以创建一个名为Blog.php的脚本,该脚本将被传递给example.com/Blog/foo并获取'/ foo '在$_SERVER['PATH_INFO']