页面ID没有'?'在URL中

时间:2013-03-24 12:49:16

标签: php database variables url-routing

我见过一些网站,通过页面ID访问不同的页面,不通过get方法传递..

这样的事情: http://www.website.com/sitefolder/pageid/ 我经常在其他网站上看到: http://www.website.com/index.php?id=12

我知道示例1的不同页面存储在数据库中,而不是存储在不同的文件夹中。

通常情况下,如果你有正斜杠,这意味着你要经历不同的文件夹..

有人可以解释我如何创建正斜杠页面id指示器,而不必为不同的页面制作数百个不同的文件夹吗?

所以只需在'sitefolder'中只有一个php页面,它可以通过URL中传递的页面ID或页面名称或URL别名来调整其内容,而不使用'?id = 12'方法。

2 个答案:

答案 0 :(得分:1)

您可以使用启用了.htaccess的{​​{1}}规则来完成此操作,如下所示:

mod_rewrite

这会将RewriteEngine On RewriteRule ^/([^/]+)$ index.php?id=$1 重写为example.com/12

修改:RegEx,细分:

  • example.com/index.php?id=12匹配行的开头
  • ^匹配斜杠
  • /匹配并保存 第一组不是斜线的字符
  • ([^/]+)匹配行尾

如果是$ RegEx,则“行”表示RewriteRule之后的任何内容。

答案 1 :(得分:0)

是的,你是对的,通常“/”表示转到下一个文件夹..但有时您也可以根据自己的需要自定义网址结构....

您需要为此启用网址重写。 这可以使用像

这样的.htaccess规则来完成
RewriteEngine On
RewriteRule ^([^/.]+)(/([^/.]+))?(/([^/.]+))?$ index.php?page=$1 [L,QSA]

或者您可以拥有自己的自定义mvc,在这种情况下,您可以修改为url以使用“/”处理参数 例如

       $request_url = $_SERVER['REQUEST_URI'];        
       $url         =  str_replace(LOCAL_PATH,"",$request_url);        
       $parameters   = explode("/",$url);

       if($_SERVER['HTTP_HOST']!='localhost')
       {
         $total = count($parameters)-1;
         unset($parameters[0]);        
         unset($parameters[1]);
         unset($parameters[2]); 
       }       
       $slipt = array_chunk($parameters, 2);
       $response = array();
       foreach($slipt as $val)
       {
          if( isset($val[1]) )
            $response[$val[0]] = $val[1];
       }         
      return $response;

这意味着我们有网址"http://domaintest/controller/method/page/1";

然后这里vaue of page参数将为1