创建网址而不是表单操作(如wordpress slug而不是pageid)

时间:2014-03-05 18:20:38

标签: php mysql sql forms url-rewriting

这是否可以在php中创建唯一的URL结构而不是表单操作。 我已经为我的网站创建了事件部分,并且值从数据库中检索并使用sql查询通过id显示。在这里,我想通过标题而不是表单操作ID来获取值 例子

// $row['title'] these values are fetched from database
<a href="eventshow.php?no='. $row['no'] .'">' .$row['title']. '</a> 

i want to develop a URL like below instead of above one

<a href="eventshow.php/eventtitle.php>' .$row['title']. '</a>

喜欢WordPress slug而不是page和post id

1 个答案:

答案 0 :(得分:0)

这取决于。如果您使用的是Apache,则可以使用.htaccess重写您的网址并将其指向PHP脚本。

RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt|)
RewriteRule ^(.*)$ /index.php/$1 [L]

这将使用example.com/eventshow/1234之类的网址,并将其重定向到index.php,然后将服务器变量$_SERVER['PATH_INFO']设置为eventshow/1234。从那里你可以解析PATH_INFO来确定应该调用什么函数以及应该传递什么值。 $_SERVER['PATH_INFO']的最大问题是传递无关斜线/的租约,因此您需要确保将其删除。

在你的例子中,我会写一些类似的东西:

的index.php

if(!empty(trim($_SERVER['PATH_INFO'],"/"))){
    //clean extraneous slashes and explode
    $request = array_filter(explode("/",trim($_SERVER['PATH_INFO'],"/"));
}else{
    //if no entity specified call index entity, I put this in to handle example.com/ requests.
    $request = array("Index");
}
$func = array_shift($request);
$result = call_user_func_array($func, $request);

给定网址example.com/eventshow/1234,最后一行将调用相当于:

$result = eventshow(1234);

你可能还想在调用之前对$ func进行一些完整性检查,检查函数是否存在,添加一些权限检查和输入过滤器。