如何在PHP中创建http://stackoverflow.com/posts/1807421/edit这样的URL?

时间:2009-11-27 10:19:51

标签: php url path filenames

在stackoverflow.com上编辑问题时,您将被重定向到这样的URL:

  

https://stackoverflow.com/posts/1807421/edit

但通常,它应该是

  

https://stackoverflow.com/posts/1807491/edit.php

  

https://stackoverflow.com/posts/edit.php?id=1807491

怎么样?

  

https://stackoverflow.com/posts/1807421/edit   创建

我知道Stackoverflow.com不是使用PHP创建的,但我想知道如何在PHP中实现这一点?

8 个答案:

答案 0 :(得分:7)

使用apache和PHP,您可以在apache配置中使用mod_rewrite规则执行一个示例,如下所示:

RewriteEngine On
RewriteRule ^/posts/(\d+)/edit /posts/edit.php?id=$1

这会查找“干净”表单的URL,然后重写它们,以便它们在内部重定向到特定的PHP脚本。

通常使用这样的规则将所有请求路由到公共控制器脚本中,这可能会像实例化“PostsController”类并要求它处理编辑请求。这是大多数PHP应用程序框架的常见功能。

答案 1 :(得分:2)

这叫做路由。请查看有关该主题的tutorials

如果你使用像cake php这样的框架,那么它应该是内置的。

答案 2 :(得分:2)

正如@mr-euro所说,你可以使用mod_rewrite,但前端控制器是一个更好的解决方案。 您强制每个请求index.php,并在index.php中编写您的应用程序控制。

答案 3 :(得分:2)

您使用Apache的.htaccess / mod_rewrite,以及可选的PHP文件,这是我喜欢的方法。

对于.htaccess,这样的事情:

RewriteEngine On
RewriteRule ^(.*)$ index.php

然后在您的PHP文件中,您可以执行以下操作:

以下内容应该在第一个斜杠之后得到所有内容。

$url = $_SERVER['REQUEST_URI'];

然后,您可以使用explode将其转换为数组。

$split = explode('/', $url);

现在您可以使用该数组来确定要加载的内容:

if ($split[1] == 'home')
{
// display homepage
}

数组从1开始,因为0通常为空。

答案 4 :(得分:1)

确实是由mod_rewrite或多视图完成的。但我更喜欢mod_rewrite。

首先:使用以下内容创建.htaccess文件:

RewriteEngine On
RewriteRule ^posts/([0-9])/(edit|delete)$ /index.php?page=posts&postId=$1&action=$2

很明显,mod_rewrite必须由您的hostingprovider启用;)

答案 5 :(得分:0)

使用mod_rewrite可以很容易地实现这一点。

答案 6 :(得分:0)

我很擅长这个,但我知道你可以使用apache mod_rewrite和触摸配置文件重定向网址。从我记得htaccess可以用于redirect。然后在用户点击时内部 http://stackoverflow.com/posts/1807421/edit它可以使用您的网页http://stackoverflow.com/edit.php?p=1807421代替您想要的任何内容。

答案 7 :(得分:0)

您可以使用htaccess +编写URI解析器类。