在stackoverflow.com上编辑问题时,您将被重定向到这样的URL:
但通常,它应该是
或
怎么样?
我知道Stackoverflow.com不是使用PHP创建的,但我想知道如何在PHP中实现这一点?
答案 0 :(得分:7)
使用apache和PHP,您可以在apache配置中使用mod_rewrite规则执行一个示例,如下所示:
RewriteEngine On
RewriteRule ^/posts/(\d+)/edit /posts/edit.php?id=$1
这会查找“干净”表单的URL,然后重写它们,以便它们在内部重定向到特定的PHP脚本。
通常使用这样的规则将所有请求路由到公共控制器脚本中,这可能会像实例化“PostsController”类并要求它处理编辑请求。这是大多数PHP应用程序框架的常见功能。
答案 1 :(得分:2)
答案 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解析器类。