【问题标题】:Rewrite URL as user friendly names in php web app [duplicate]在php Web应用程序中将URL重写为用户友好名称[重复]
【发布时间】:2018-02-08 17:09:51
【问题描述】:

我正在使用 PHP5、MySQL 开发一个教育应用程序。我使用 Slim 作为框架来开发网站和移动应用程序的 API。

我有各种数据模型,例如问题、测验、主题、主题等。我当前的网站具有以下 URL 模式:

  • www.site.com/subjects.php?subject_id=1
  • www.site.com/topics.php?topic_id=2
  • www.site.com/quizzes.php?id=3

我浏览了有关使用 Apache 进行 URL 重写的资源,.htaccess。但这对我来说仍然不是很清楚。我正在寻找一种解决方案,使我能够实现用户友好且不可预测的 url 链接。例如

  • www.site.com/subjects/science
  • www.site.com/topics/light-energy
  • www.site.com/quizzes/check-your-grammar-skills

但是...这些数据取决于我的数据库。在不使用 laravel 之类的框架的情况下实现这一目标的最佳方法是什么。

【问题讨论】:

  • 当然,到目前为止我们可以跟进。不清楚的是您的具体问题是什么。到目前为止,您没有显示任何代码,您自己的尝试,因此我们无法说出您在哪里遇到问题。而且你当然不只是在这里问问题让我们为你做你的工作,对吗?
  • 您使用的是 Slim,对吗?你读过他们的这部分文档slimframework.com/docs/objects/router.html#how-to-create-routes 吗?
  • 从您的示例中也不清楚在重写期间实际 ID 应该来自哪里。像“科学”或“光能”这样的词当然不是 ID。但是重写引擎无法猜测显然没有在 URL 中命名的 ID...
  • @VishalKumar “我正在使用”,但据我们所知,你不是 OP……
  • @VishalKumar 如果这些是数字 ID,那么它们尤其需要成为请求 URL 的一部分。如前所述:重写引擎无法以某种方式神奇地猜测您在 URL 中引用的特定 ID。如果该数字 ID 不是 URL 的一部分。我在下面添加了一个答案,解释了一种可能的典型方法。

标签: php mod-rewrite url-rewriting slim


【解决方案1】:

您的问题不清楚,或者您还没有(还)真正考虑过这一点...如果您想将漂亮的 URL 重写为引用数据模型中的某些特定对象的内部请求,那么您确实需要该对象的URL 中的 ID。仅仅是因为 http 服务器重写逻辑无法以某种方式猜测该(通常是数字)ID。

所以我假设您最终希望在此方案中使用 URL:

对于这种情况,您需要这样的重写集:

RewriteEngine on
RewriteRule ^/?subjects/(\w+)/(\d+)$ /subjects.php?subject=$1&subjectid=$2 [END]
RewriteRule ^/?topics/(\w+)/(\d+)$ /topics.php?topic=$1&topic_id=$2 [END]
RewriteRule ^/?quizzes/(\w+)/(\d+)$ /quizzes.php?quizz=$1&id=$2 [END]

我个人不会为 ID 列使用不同的名称,但我猜这是个人选择和内部匹配方式的问题。

上述规则集适用于 http 服务器主机配置,同样适用于一些动态配置文件(“.htaccess”样式文件)。您显然需要加载并激活 http 服务器重写模块。如果您决定使用动态配置规则,还需要确保它的解释已启用(请参阅文档中的 AllowOverride 指令)并且该文件位于 http 主机 DOCUMENT_ROOT 并且可由服务器进程读取.

如果您收到对这些 URL 的请求的 http 状态 500(“内部服务器错误”),那么您很可能操作的是非常旧版本的 apache http 服务器。在这种情况下,请尝试使用 [L] 标志而不是 [END] 标志。


还有一个一般提示:您应该始终喜欢将此类规则放在 http 服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess 样式文件)。众所周知,这些文件容易出错,难以调试,而且它们确实会降低服务器的速度。它们仅在您无法控制主机配置(阅读:非常便宜的托管服务提供商)或您有一个依赖于编写自己的重写规则的应用程序(这显然是一个安全噩梦)的情况下作为最后一个选项被支持)。

【讨论】:

  • 不错的信息。我已经研究过这个主题......虽然没有深入......你能解释一下你所说的 - “如果你有一个依赖于编写自己的重写规则的应用程序”是什么意思?
  • @DigitalWolf 相当多的应用程序具有修改其配置的内置逻辑。这是通过应用程序更改一些动态配置文件来完成的。这是灵活的,并且可以轻松设置,特别是在免费的网络空间服务提供上,这些服务通常不会授予您访问 http 服务器主机配置的权限(因为您与成千上万的其他客户共享 http 服务器)。问题在于,这也可能允许攻击者更改您的应用程序的配置......(例如 wordpress、drupal、nextcloud ......)
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 2020-01-22
  • 2011-01-07
  • 1970-01-01
相关资源
最近更新 更多