【问题标题】:Is there a way to rewrite my urls without using mod_rewrite and .htaccess?有没有办法在不使用 mod_rewrite 和 .htaccess 的情况下重写我的网址?
【发布时间】:2017-12-28 09:58:38
【问题描述】:

有没有办法重写我的网址:

http://www.website.com/notification.php

http://www.website.com/notification

我没有打开 mod_rewrite 的权限,我们的组织也不想要它。有没有办法只用 php 实现这一点?

提前致谢

【问题讨论】:

  • 如果你不介意像/index.php/notification这样的网址
  • 有纯 PHP 路由器(例如 nikic/fast-route)。但是,如果没有mod_rewrite,完全隐藏路由脚本本身并非易事,因此您最终会得到http://example.com/index.php?/foo/barhttp://example.com/index/foo/bar 之类的东西,具体取决于您允许使用的Apache 设置;另外,您需要在路由工具之上编写代码,这可能仅在新项目中可行。 mod_rewrite 无论如何是一个相当基本的工具,所以我可以弄清楚组织项目的整体质量;-)
  • 谢谢您的回复...我的客户给了我一个访问 SSH 来配置 apache.. 但是当我启用模式重写并将 Alloverride All 添加到我的 drudellehost 上的目录时,我有一个错误 500 错误配置的服务器有什么想法吗?在我在项目目录中添加了 .htacess 之后
  • "500 Internal Server Error" 仅表示服务器配置为不显示错误消息。您需要在服务器日志中查找。
  • 在服务器日志中我得到配置错误:无法执行身份验证。 AuthType 未设置!:/有什么想法吗?

标签: php apache mod-rewrite url-rewriting


【解决方案1】:

如果您只有几页,您可以将文件重命名为 index.php 并将其移动到具有所需名称的目录中。

所以notification.php 变为notification/index.php,您可以使用网址/notification/notification/ 访问它。

这种方法的缺点是,你会得到一个混乱的文件夹结构,每个文件都被命名为 index.php。如果您在每个文件夹中放置某种包装文件,它会调用实际的脚本 - 但文件夹结构保持不变,您可以解决后面的问题。


另一种方法是使用以? 开头的url 进行某种伪重写。因此,您可以调用访问您的文件,例如website.com/?notification。在这种情况下,您必须将所有路由逻辑放在位于/index.php 中。这样做的好处是,您的网址保持灵活,您不必创建一些奇怪的文件系统结构。不好的一点是,您必须在每个网址中保留问号。

【讨论】:

  • 你能回答这个问题吗? /notification.php/notification 如果不是,那么答案应该是 no 它不可能。不是解决方法,这很明显。
  • 谢谢您的回复...我的客户给我一个访问 SSh 来配置 apache.. 但是当我启用模式重写并将 Alloverride All 添加到我的 drudellehost 上的目录时,我有一个错误 500 错误配置的服务器有什么想法吗?在我在项目目录中添加了 .htacess 之后..
【解决方案2】:

HTML5介绍history.pushState()

pushState() 接受三个参数:一个状态对象,一个标题(即 当前被忽略)和(可选)一个 URL。

示例:-

网址:-http://www.website.com/notification.php

window.history.pushState('notification.php', 'Title', 'notification');

【讨论】:

    【解决方案3】:

    我相信你可以“简单”地做到这一点:

    <Location "/notification">
      SetHandler application/x-httpd-php
    </Location>
    

    如果您这样做,我希望您使用的是灵活的请求路由器,因为您将大量使用 REQUEST_URI。由于 apache 不会费心寻找文件或其他任何 AFAIK,因此您必须自己返回静态资源(图像、样式表、js 等)。

    无论如何,您似乎可以在 .htaccess 文件中使用它,因此您无需打扰服务器的主要配置。

    见:https://httpd.apache.org/docs/2.4/mod/core.html#sethandler

    【讨论】:

    • 谢谢您的回复...我的客户给了我一个访问 SSH 来配置 apache.. 但是当我启用模式重写并将 Alloverride All 添加到我的 drudellehost 上的目录时,我有一个错误 500 错误配置的服务器有什么想法吗?在我在项目目录中添加了 .htacess 之后
    猜你喜欢
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 2016-01-19
    相关资源
    最近更新 更多