Nginx伪静态 修改url 禁止原url的访问

需求是这样的,原url:xxx/shop 我需要将shop修改为xxx/abc_shop 而原url不能访问。

第1个回答  2016-06-13
默认URL_MODEL为0的时候是没有路由判断的,下面是我修改U函数的截图和代码。图中标识哪些地方是我增加的。
整个U函数的完整代码就不贴出来了,只贴出我增加的部分,也就是
if(C('URL_MODEL') == 0){这个区间里面的代码做了修改}else{...}
if(C('DIY_ROUTE')){
//重新获取路由规则里面里面的键
$key = $module.'/'.$var[$varController].'/'.$var[$varAction];
static $router_ruler = array();
if(empty($router_ruler)){
$router_ruler = include(CONF_PATH.'route.php');
}
$url = '/'.route($router_ruler,$key,$vars,$suffix);
}else{
$url = __APP__.'?'.C('VAR_MODULE')."={$module}&".http_build_query(array_reverse($var));
if($urlCase){
$url = strtolower($url);
}
if(!empty($vars)) {
$vars = http_build_query($vars);
$url .= '&'.$vars;
}
}
OneThink的URL伪静态优化:[2]URL_MODEL为0
上面的代码中加了一个配置参数就是DIY_ROUTE
ThinkPHP的配置文件在Application\Common\Conf\config.php的末尾增加一个元素
'DIY_ROUTE' => true,
上面还导入一个路由文件route.php,该文件放在\Application\Common\Conf\route.php
路由演示代码如下:
return array(
//一级路由
'home/index/about'=>'about',
//二级路由
'home/article/detail' =>array(
1=>'[id]',
2=>'[id]-[p]'
),
//三级路由
'home/article/category'=>array(
'category'=>array(
'1'=>array(
1=>'note',
2=>'note-[p]',
),
'2'=>array(
1=>'news',
2=>'news-[p]',
),
'3'=>array(
1=>'blog',
2=>'blog-[p]',
),
)
)
);
OneThink的URL伪静态优化:[2]URL_MODEL为0
OneThink的URL伪静态优化:[2]URL_MODEL为0
然后增加了一些函数来配合刚刚修改的U函数
OneThink的URL伪静态优化:[2]URL_MODEL为0
首先是路由函数
function route($router_ruler,$url,$params,$suffix){
//路由规则里全写成小写吧
$router_ruler = array_change_key_case($router_ruler);
$router_key = strtolower(trim(trim($url),'/'));
if(isset($router_ruler[$router_key])){
//一级路由
$real_url = $router_ruler[$router_key];
//由于规定参数格式必须是数组,所以这里只存在是数组和不是数组(为空)的情况
if(is_array($real_url)){
//看其是不是索引数组
if(array_product(array_map('is_numeric', array_keys($real_url)))==1){
//二级路由
if(is_array($params)){
$real_url = routeMatch($real_url[count($params)],$params);
}
}else{
//三级路由
foreach($params as $k =>$v){
if(array_key_exists($k,$real_url)){
$routeReg = $real_url[$k][$v][count($params)];
unset($params[$k]);
$real_url = routeMatch($routeReg,$params);
}
}
}
}
if($suffix) {
$suffix = $suffix===true?C('URL_HTML_SUFFIX'):$suffix;
if($pos = strpos($suffix, '|')){
$suffix = substr($suffix, 0, $pos);
}
if($suffix && '/' != substr($url,-1)){
$real_url .= '.'.ltrim($suffix,'.');
}
}
}else{
$real_url = urlBuild($url,$params);
}
return $real_url;
}
相似回答