在 php 网络应用程序中将 URL 重写为用户友好的名称

Rewrite URL as user friendly names in php web app

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

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

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

但是...这些数据取决于我的数据库。在不使用像 laravel.

这样的框架的情况下实现这一目标的最佳方法是什么

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

所以我假设你最终想按照这个方案使用URLs:

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

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

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

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

如果您对那些 URLs ("internal server error") 的请求返回了 500 的 http 状态,那么很可能您操作的是非常旧版本的 apache http 服务器。在这种情况下,请尝试使用 [L] 标志而不是 [END] 标志。


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