在php web app中将URL重写为用户友好名称

时间:2017-08-30 21:05:08

标签: php mod-rewrite url-rewriting slim

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

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

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

我使用Apache,.htaccess进行了URL重写的资源。但这对我来说仍然不是很清楚。我正在寻找一种解决方案,可以让我实现用户友好和不可预测的网址链接。 e.g。

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

然而......这些数据取决于我的数据库。如果不使用像laravel这样的框架,最好的方法是什么。

1 个答案:

答案 0 :(得分:2)

要么你的问题不清楚,要么你还没有(还)真的想过......如果你想将漂亮的URL重写为引用数据模型中某些特定对象的内部请求,那么你确实需要该对象和#39; 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 comlumn使用不同的名称,但这是个人选择的问题,以及你内部匹配的问题,我想。

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

如果您对这些URL的请求获得了http状态500("内部服务器错误"),那么您可能会运行非常旧版本的apache http服务器。在这种情况下,请尝试使用DOCUMENT_ROOT标志而不是[L]标志。

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