Page id without '?' in URL


Page id without '?' in URL

我见过一些网站,不同的页面是通过一个页面id,而不是通过get方法传递访问。

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

我知道例子1的不同页面存储在一个数据库中,而不是在不同的文件夹中,因为它会建议…

一般来说,如果你有一个正斜杠,这意味着你正在浏览不同的文件夹。

有人能告诉我如何创建正斜杠页面id指示器,而不必为不同的页面创建数百个不同的文件夹吗?

所以只是简单的一个php页面在'sitefolder'它通过页面id或页面名称或URL别名通过URL传递其内容而不使用'?id = 12 '方法。

您可以使用启用mod_rewrite.htaccess规则来完成此操作,如下所示:

RewriteEngine On
RewriteRule ^/([^/]+)$  index.php?id=$1

这将重写example.com/12example.com/index.php?id=12

Edit: RegEx,细分:

  • ^匹配行起始
  • /匹配斜杠
  • ([^/]+)匹配并保存非斜杠的第一组字符
  • $匹配行尾

RewriteRule RegEx的情况下,"line"表示example.com之后的任何内容。

是的,你是对的,通常"/"表示进入下一个文件夹。但有时你也可以自定义url结构根据你的需要....

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

这样的.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;

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

那么这里page参数的值将是1