我见过一些网站,通过页面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'方法。
答案 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