【问题标题】:Pretty URLs without mod_rewrite, without .htaccess没有 mod_rewrite 的漂亮 URL,没有 .htaccess
【发布时间】:2010-11-01 19:04:04
【问题描述】:

由于无法访问 .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 技术对性能的影响有多大?

【问题讨论】:

  • 哪个网络服务器?或者,您是在问如何在 IIS 上获取无扩展名的 PHP url?
  • 无扩展 PHP 会产生同样的错觉,对吧?另一方面,我猜 /Blog/2009/12/10 行不通?

标签: php html url .htaccess mod-rewrite


【解决方案1】:

如果启用了MultiViews 选项,或者您可以说服持有密钥的人启用它,您可以创建一个名为 Blog.php 的脚本,该脚本将向example.com/Blog/foo 传递请求并在@ 中获取'/foo' 987654323@.

【讨论】:

  • 是的,我现在明白了。已编辑。
【解决方案2】:

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

例如对于 Apache (http://httpd.apache.org/docs/2.0/mod/core.html#errordocument)

ErrorDocument 404 /index.php

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

【讨论】:

  • 啊,打败我了。我考虑了 5 分钟,最后得出了同样的结论。
  • 返回的文档仍然是 HTTP 404 状态,而不是 200。这会给网络爬虫带来很多问题。
  • @chaos:
  • 您不能 POST(即可以,但数据会丢失)到错误文档脚本。
  • @Maciej Łebkowski:这应该不是问题,因为客户通常不会自己发帖给你(你说什么时候发给哪个资源)。
【解决方案3】:

一个非常简单的方法是:

  • .htaccess 中声明一个 404 错误文档(例如 PHP)
  • 使用$_SERVER解析查询并查看它是否对应任何结果
  • 如果是这样,使用 header() 将 HTTP 状态 404 替换为状态 200 并包含 index.php

【讨论】:

  • 问题又变成了,如何在没有 .htaccess 的情况下做到这一点。不过,一些虚拟主机确实在其配置中提供了自定义 404,因此这是可能的。
  • 对。如果无法选择(或编辑)您的 404 ErrorDocument 或使用 .htaccess,我看不到任何解决方案,因为您必须在请求处理级别进行设置......或者使用您不喜欢的解决方案:index.php/Blog/...
【解决方案4】:

你也可以有类似的网址

http://domain.com/index.php/Blog/Hello_World

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

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

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

【讨论】:

  • 我知道这种技术。我改变了要求没有这种方法的方法的问题。尽管如此,这是一个替代方案,所以你是对的。我只是不喜欢这个。
【解决方案5】:

唯一的方法是使用自定义 404 页面。如果不重新配置 Web 服务器的 MIME 类型,您将无法使用 PHP 解释器解释无扩展名文件。但是你说连.htaccess都不能编辑,所以没办法。

【讨论】:

    【解决方案6】:

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

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

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

    【讨论】:

    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

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

      只要在 URL 的域部分后面加一个问号就可以非常接近你想要的,即;

      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

      所以你可以随心所欲地处理它们。

      【讨论】:

      • 我实际上只是实现了类似的东西,发现单个问号可以很好地调用 index.php 页面,而不会将其暴露为处理程序。它不是那么干净,但它仍然可以在无需配置 Web 服务器重写规则的情况下工作。
      猜你喜欢
      • 2012-05-28
      • 2011-03-09
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 2017-02-08
      • 1970-01-01
      • 2016-06-23
      相关资源
      最近更新 更多