change the format of config in zk
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
index 141caa8..f0743aa 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
@@ -27,7 +27,10 @@
     public static final String METADATA_ADDRESS = "dubbo.metadata-report.address";
     public static final String DEFAULT_ROOT = "dubbo";
     public static final String PATH_SEPARATOR = "/";
+    public static final String DOT = ".";
+    public static final String COLON = ":";
     public static final String GROUP_KEY = "group";
+    public static final String DUBBO_GROUP = "dubbo";
     public static final String CONFIG_KEY = "config";
     public static final String DUBBO_PROPERTY = "dubbo.properties";
     public static final String PROVIDER_SIDE = "provider";
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Tool.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Tool.java
index 602263c..2b3cd91 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Tool.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Tool.java
@@ -16,6 +16,8 @@
  */
 package org.apache.dubbo.admin.common.util;
 
+import org.apache.dubbo.common.utils.StringUtils;
+
 /**
  * Tool
  *
@@ -55,4 +57,19 @@
         }
         return null;
     }
+
+    public static String encodeKey(String key) {
+        String interfaze = getInterface(key);
+        String group = getGroup(key);
+        String version = getVersion(key);
+        String encodeKey = interfaze + Constants.COLON;
+        if (StringUtils.isNotEmpty(version)) {
+            encodeKey = encodeKey + version;
+        }
+        encodeKey = encodeKey + Constants.COLON;
+        if (StringUtils.isNotEmpty(group)) {
+            encodeKey = encodeKey + group;
+        }
+        return encodeKey;
+    }
 }
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java
index 3510e54..a6bb2a6 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java
@@ -21,6 +21,7 @@
 import org.apache.dubbo.admin.common.exception.ResourceNotFoundException;
 import org.apache.dubbo.admin.common.exception.VersionValidationException;
 import org.apache.dubbo.admin.common.util.Constants;
+import org.apache.dubbo.admin.common.util.ConvertUtil;
 import org.apache.dubbo.admin.model.dto.AccessDTO;
 import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
 import org.apache.dubbo.admin.service.ProviderService;
@@ -65,9 +66,9 @@
         List<AccessDTO> accessDTOS = new ArrayList<>();
         AccessDTO accessDTO;
         if (StringUtils.isNotBlank(application)) {
-            accessDTO = routeService.findAccess(application);
+            accessDTO = routeService.findAccess(application, false);
         } else {
-            accessDTO = routeService.findAccess(service);
+            accessDTO = routeService.findAccess(service, true);
         }
         if (accessDTO != null) {
             accessDTO.setEnabled(true);
@@ -76,17 +77,17 @@
         return accessDTOS;
     }
 
-    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
-    public AccessDTO detailAccess(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/{type}/{id}", method = RequestMethod.GET)
+    public AccessDTO detailAccess(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        AccessDTO accessDTO = routeService.findAccess(id);
+        AccessDTO accessDTO = routeService.findAccess(id, type.equals(Constants.SERVICE));
         return accessDTO;
     }
 
-    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
-    public void deleteAccess(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/{type}/{id}", method = RequestMethod.DELETE)
+    public void deleteAccess(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        routeService.deleteAccess(id);
+        routeService.deleteAccess(id, type.equals(Constants.SERVICE));
     }
 
     @RequestMapping(method = RequestMethod.POST)
@@ -107,9 +108,9 @@
 
     @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
     public void updateAccess(@PathVariable String id, @RequestBody AccessDTO accessDTO, @PathVariable String env) {
-
+        String type = ConvertUtil.getScopeFromDTO(accessDTO);
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        ConditionRouteDTO route = routeService.findConditionRoute(id);
+        ConditionRouteDTO route = routeService.findConditionRoute(id, type.equals(Constants.SERVICE));
         if (Objects.isNull(route)) {
             throw new ResourceNotFoundException("Unknown ID!");
         }
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java
index 8486d3e..9017fb5 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java
@@ -22,6 +22,7 @@
 import org.apache.dubbo.admin.common.exception.ResourceNotFoundException;
 import org.apache.dubbo.admin.common.exception.VersionValidationException;
 import org.apache.dubbo.admin.common.util.Constants;
+import org.apache.dubbo.admin.common.util.ConvertUtil;
 import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
 import org.apache.dubbo.admin.service.ProviderService;
 import org.apache.dubbo.admin.service.RouteService;
@@ -69,7 +70,8 @@
     @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
     public boolean updateRule(@PathVariable String id, @RequestBody ConditionRouteDTO newConditionRoute, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        ConditionRouteDTO oldConditionRoute = routeService.findConditionRoute(id);
+        String type = ConvertUtil.getScopeFromDTO(newConditionRoute);
+        ConditionRouteDTO oldConditionRoute = routeService.findConditionRoute(id, type.equals(Constants.SERVICE));
         if (oldConditionRoute == null) {
             throw new ResourceNotFoundException("can not find route rule for: " + id);
         }
@@ -83,9 +85,9 @@
         ConditionRouteDTO conditionRoute = null;
         List<ConditionRouteDTO> result = new ArrayList<>();
         if (StringUtils.isNotBlank(application)) {
-            conditionRoute = routeService.findConditionRoute(application);
+            conditionRoute = routeService.findConditionRoute(application, false);
         } else if (StringUtils.isNotBlank(service)) {
-            conditionRoute = routeService.findConditionRoute(service);
+            conditionRoute = routeService.findConditionRoute(service, true);
         } else {
             throw new ParamValidationException("Either Service or application is required.");
         }
@@ -95,34 +97,34 @@
         return result;
     }
 
-    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
-    public ConditionRouteDTO detailRoute(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/{type}/{id}", method = RequestMethod.GET)
+    public ConditionRouteDTO detailRoute(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        ConditionRouteDTO conditionRoute = routeService.findConditionRoute(id);
+        ConditionRouteDTO conditionRoute = routeService.findConditionRoute(id, type.equals(Constants.SERVICE));
         if (conditionRoute == null || conditionRoute.getConditions() == null) {
             throw new ResourceNotFoundException("Unknown ID!");
         }
         return conditionRoute;
     }
 
-    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
-    public boolean deleteRoute(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/{type}/{id}", method = RequestMethod.DELETE)
+    public boolean deleteRoute(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        routeService.deleteConditionRoute(id);
+        routeService.deleteConditionRoute(id, type.equals(Constants.SERVICE));
         return true;
     }
 
-    @RequestMapping(value = "/enable/{id}", method = RequestMethod.PUT)
-    public boolean enableRoute(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/enable/{type}/{id}", method = RequestMethod.PUT)
+    public boolean enableRoute(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        routeService.enableConditionRoute(id);
+        routeService.enableConditionRoute(id, type.equals(Constants.SERVICE));
         return true;
     }
 
-    @RequestMapping(value = "/disable/{id}", method = RequestMethod.PUT)
-    public boolean disableRoute(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/disable/{type}/{id}", method = RequestMethod.PUT)
+    public boolean disableRoute(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        routeService.disableConditionRoute(id);
+        routeService.disableConditionRoute(id, type.equals(Constants.SERVICE));
         return true;
     }
 
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
index 3daad1f..0ae2c7c 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
@@ -22,6 +22,7 @@
 import org.apache.dubbo.admin.common.exception.ResourceNotFoundException;
 import org.apache.dubbo.admin.common.exception.VersionValidationException;
 import org.apache.dubbo.admin.common.util.Constants;
+import org.apache.dubbo.admin.common.util.ConvertUtil;
 import org.apache.dubbo.admin.model.dto.BalancingDTO;
 import org.apache.dubbo.admin.service.OverrideService;
 import org.apache.dubbo.admin.service.ProviderService;
@@ -72,7 +73,8 @@
             throw new ParamValidationException("Unknown ID!");
         }
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        BalancingDTO balancing = overrideService.findBalance(id);
+        String type = ConvertUtil.getScopeFromDTO(balancingDTO);
+        BalancingDTO balancing = overrideService.findBalance(id, type.equals(Constants.SERVICE));
         if (balancing == null) {
             throw new ResourceNotFoundException("Unknown ID!");
         }
@@ -91,9 +93,9 @@
         }
         BalancingDTO balancingDTO;
         if (StringUtils.isNotBlank(application)) {
-            balancingDTO = overrideService.findBalance(application);
+            balancingDTO = overrideService.findBalance(application, false);
         } else {
-            balancingDTO = overrideService.findBalance(service);
+            balancingDTO = overrideService.findBalance(service, true);
         }
         List<BalancingDTO> balancingDTOS = new ArrayList<>();
         if (balancingDTO != null) {
@@ -102,23 +104,23 @@
         return balancingDTOS;
     }
 
-    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
-    public BalancingDTO detailLoadBalance(@PathVariable String id, @PathVariable String env) throws ParamValidationException {
+    @RequestMapping(value = "/{type}/{id}", method = RequestMethod.GET)
+    public BalancingDTO detailLoadBalance(@PathVariable String id, @PathVariable String type, @PathVariable String env) throws ParamValidationException {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        BalancingDTO balancingDTO = overrideService.findBalance(id);
+        BalancingDTO balancingDTO = overrideService.findBalance(id, type.equals(Constants.SERVICE));
         if (balancingDTO == null) {
             throw new ResourceNotFoundException("Unknown ID!");
         }
         return balancingDTO;
     }
 
-    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
-    public boolean deleteLoadBalance(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/{type}/{id}", method = RequestMethod.DELETE)
+    public boolean deleteLoadBalance(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
         if (id == null) {
             throw new IllegalArgumentException("Argument of id is null!");
         }
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        overrideService.deleteBalance(id);
+        overrideService.deleteBalance(id, type.equals(Constants.SERVICE));
         return true;
     }
 
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java
index c50ae01..60a6e5b 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java
@@ -22,6 +22,7 @@
 import org.apache.dubbo.admin.common.exception.ResourceNotFoundException;
 import org.apache.dubbo.admin.common.exception.VersionValidationException;
 import org.apache.dubbo.admin.common.util.Constants;
+import org.apache.dubbo.admin.common.util.ConvertUtil;
 import org.apache.dubbo.admin.model.dto.DynamicConfigDTO;
 import org.apache.dubbo.admin.service.OverrideService;
 import org.apache.dubbo.admin.service.ProviderService;
@@ -69,7 +70,8 @@
     @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
     public boolean updateOverride(@PathVariable String id, @RequestBody DynamicConfigDTO overrideDTO, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        DynamicConfigDTO old = overrideService.findOverride(id);
+        String type = ConvertUtil.getScopeFromDTO(overrideDTO);
+        DynamicConfigDTO old = overrideService.findOverride(id, type.equals(Constants.SERVICE));
         if (old == null) {
             throw new ResourceNotFoundException("Unknown ID!");
         }
@@ -84,9 +86,9 @@
         DynamicConfigDTO override = null;
         List<DynamicConfigDTO> result = new ArrayList<>();
         if (StringUtils.isNotBlank(service)) {
-            override = overrideService.findOverride(service);
+            override = overrideService.findOverride(service, true);
         } else if(StringUtils.isNotBlank(application)){
-            override = overrideService.findOverride(application);
+            override = overrideService.findOverride(application, false);
         } else {
             throw new ParamValidationException("Either Service or application is required.");
         }
@@ -96,10 +98,10 @@
         return result;
     }
 
-    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
-    public DynamicConfigDTO detailOverride(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/{type}/{id}", method = RequestMethod.GET)
+    public DynamicConfigDTO detailOverride(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        DynamicConfigDTO override = overrideService.findOverride(id);
+        DynamicConfigDTO override = overrideService.findOverride(id, type.equals(Constants.SERVICE));
         if (override == null) {
             throw new ResourceNotFoundException("Unknown ID!");
         }
@@ -107,26 +109,26 @@
         return override;
     }
 
-    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
-    public boolean deleteOverride(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/{type}/{id}", method = RequestMethod.DELETE)
+    public boolean deleteOverride(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        overrideService.deleteOverride(id);
+        overrideService.deleteOverride(id, type.equals(Constants.SERVICE));
         return true;
     }
 
-    @RequestMapping(value = "/enable/{id}", method = RequestMethod.PUT)
-    public boolean enableRoute(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/enable/{type}/{id}", method = RequestMethod.PUT)
+    public boolean enableOverride(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
 
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        overrideService.enableOverride(id);
+        overrideService.enableOverride(id, type.equals(Constants.SERVICE));
         return true;
     }
 
-    @RequestMapping(value = "/disable/{id}", method = RequestMethod.PUT)
-    public boolean disableRoute(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/disable/{type}/{id}", method = RequestMethod.PUT)
+    public boolean disableOverride(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
 
-        overrideService.disableOverride(id);
+        overrideService.disableOverride(id, type.equals(Constants.SERVICE));
         return true;
     }
 }
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/WeightController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/WeightController.java
index 3333e90..e7a7ff4 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/WeightController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/WeightController.java
@@ -22,6 +22,7 @@
 import org.apache.dubbo.admin.common.exception.ResourceNotFoundException;
 import org.apache.dubbo.admin.common.exception.VersionValidationException;
 import org.apache.dubbo.admin.common.util.Constants;
+import org.apache.dubbo.admin.common.util.ConvertUtil;
 import org.apache.dubbo.admin.model.dto.WeightDTO;
 import org.apache.dubbo.admin.service.OverrideService;
 import org.apache.dubbo.admin.service.ProviderService;
@@ -71,7 +72,8 @@
             throw new ParamValidationException("Unknown ID!");
         }
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        WeightDTO weight = overrideService.findWeight(id);
+        String type = ConvertUtil.getScopeFromDTO(weightDTO);
+        WeightDTO weight = overrideService.findWeight(id, type.equals(Constants.SERVICE));
         if (weight == null) {
             throw new ResourceNotFoundException("Unknown ID!");
         }
@@ -88,9 +90,9 @@
         }
         WeightDTO weightDTO;
         if (StringUtils.isNotBlank(application)) {
-            weightDTO = overrideService.findWeight(application);
+            weightDTO = overrideService.findWeight(application, false);
         } else {
-            weightDTO = overrideService.findWeight(service);
+            weightDTO = overrideService.findWeight(service, true);
         }
         List<WeightDTO> weightDTOS = new ArrayList<>();
         if (weightDTO != null) {
@@ -100,20 +102,20 @@
         return weightDTOS;
     }
 
-    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
-    public WeightDTO detailWeight(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/{type}/{id}", method = RequestMethod.GET)
+    public WeightDTO detailWeight(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        WeightDTO weightDTO = overrideService.findWeight(id);
+        WeightDTO weightDTO = overrideService.findWeight(id, type.equals(Constants.SERVICE));
         if (weightDTO == null) {
             throw new ResourceNotFoundException("Unknown ID!");
         }
         return weightDTO;
     }
 
-    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
-    public boolean deleteWeight(@PathVariable String id, @PathVariable String env) {
+    @RequestMapping(value = "/{type}/{id}", method = RequestMethod.DELETE)
+    public boolean deleteWeight(@PathVariable String id, @PathVariable String type, @PathVariable String env) {
         id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-        overrideService.deleteWeight(id);
+        overrideService.deleteWeight(id, type.equals(Constants.SERVICE));
         return true;
     }
 }
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/OverrideService.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/OverrideService.java
index b17b96f..aa40398 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/OverrideService.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/OverrideService.java
@@ -26,28 +26,28 @@
 
     void updateOverride(DynamicConfigDTO override);
 
-    void deleteOverride(String id);
+    void deleteOverride(String id, boolean isService);
 
-    void enableOverride(String id);
+    void enableOverride(String id, boolean isService);
 
-    void disableOverride(String id);
+    void disableOverride(String id, boolean isService);
 
-    DynamicConfigDTO findOverride(String id);
+    DynamicConfigDTO findOverride(String id, boolean isService);
 
     void saveWeight(WeightDTO weightDTO);
 
     void updateWeight(WeightDTO weightDTO);
 
-    void deleteWeight(String id);
+    void deleteWeight(String id, boolean isService);
 
-    WeightDTO findWeight(String id);
+    WeightDTO findWeight(String id, boolean isService);
 
     void saveBalance(BalancingDTO balancingDTO);
 
     void updateBalance(BalancingDTO balancingDTO);
 
-    void deleteBalance(String id);
+    void deleteBalance(String id, boolean isService);
 
-    BalancingDTO findBalance(String id);
+    BalancingDTO findBalance(String id, boolean isService);
 
 }
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/RouteService.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/RouteService.java
index 4f5acb8..165a759 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/RouteService.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/RouteService.java
@@ -30,23 +30,23 @@
 
     void updateConditionRoute(ConditionRouteDTO newConditionRoute);
 
-    void deleteConditionRoute(String id);
+    void deleteConditionRoute(String id, boolean isService);
 
-    void deleteAccess(String id);
+    void deleteAccess(String id, boolean isService);
 
     void createAccess(AccessDTO accessDTO);
 
-    AccessDTO findAccess(String id);
+    AccessDTO findAccess(String id, boolean isService);
 
     void updateAccess(AccessDTO accessDTO);
 
-    void enableConditionRoute(String id);
+    void enableConditionRoute(String id, boolean isService);
 
 
-    void disableConditionRoute(String id);
+    void disableConditionRoute(String id, boolean isService);
 
 
-    ConditionRouteDTO findConditionRoute(String id);
+    ConditionRouteDTO findConditionRoute(String id, boolean isService);
 
     void createTagRoute(TagRouteDTO tagRoute);
 
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/OverrideServiceImpl.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/OverrideServiceImpl.java
index a0a49fa..0d8e954 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/OverrideServiceImpl.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/OverrideServiceImpl.java
@@ -20,6 +20,7 @@
 import org.apache.dubbo.admin.common.util.Constants;
 import org.apache.dubbo.admin.common.util.ConvertUtil;
 import org.apache.dubbo.admin.common.util.OverrideUtils;
+import org.apache.dubbo.admin.common.util.Tool;
 import org.apache.dubbo.admin.common.util.YamlParser;
 import org.apache.dubbo.admin.model.adapter.DynamicConfigDTO2OverrideDTOAdapter;
 import org.apache.dubbo.admin.model.adapter.LoadBalance2OverrideAdapter;
@@ -47,7 +48,8 @@
     @java.lang.Override
     public void saveOverride(DynamicConfigDTO override) {
         String id = ConvertUtil.getIdFromDTO(override);
-        String path = getPath(id);
+        String scope = ConvertUtil.getScopeFromDTO(override);
+        String path = getPath(id, scope.equals(Constants.SERVICE));
         String exitConfig = dynamicConfiguration.getConfig(path);
         List<OverrideConfig> configs = new ArrayList<>();
         OverrideDTO existOverride = new DynamicConfigDTO2OverrideDTOAdapter(override);
@@ -78,7 +80,8 @@
     @java.lang.Override
     public void updateOverride(DynamicConfigDTO update) {
         String id = ConvertUtil.getIdFromDTO(update);
-        String path = getPath(id);
+        String scope = ConvertUtil.getScopeFromDTO(update);
+        String path = getPath(id, scope.equals(Constants.SERVICE));
         String exitConfig = dynamicConfiguration.getConfig(path);
         if (exitConfig == null) {
             //throw exception
@@ -113,11 +116,11 @@
     }
 
     @java.lang.Override
-    public void deleteOverride(String id) {
+    public void deleteOverride(String id, boolean isService) {
         if (StringUtils.isEmpty(id)) {
             // throw exception
         }
-        String path = getPath(id);
+        String path = getPath(id, isService);
         String config = dynamicConfiguration.getConfig(path);
         if (config == null) {
             //throw exception
@@ -151,11 +154,11 @@
     }
 
     @java.lang.Override
-    public void enableOverride(String id) {
+    public void enableOverride(String id, boolean isService) {
         if (StringUtils.isEmpty(id)) {
             //throw exception
         }
-        String path = getPath(id);
+        String path = getPath(id, isService);
         String config = dynamicConfiguration.getConfig(path);
         if (config == null) {
             //throw exception
@@ -178,11 +181,11 @@
     }
 
     @java.lang.Override
-    public void disableOverride(String id) {
+    public void disableOverride(String id, boolean isService) {
         if (StringUtils.isEmpty(id)) {
             //throw exception
         }
-        String path = getPath(id);
+        String path = getPath(id, isService);
         if (dynamicConfiguration.getConfig(path) == null) {
             //throw exception
         }
@@ -205,11 +208,11 @@
     }
 
     @java.lang.Override
-    public DynamicConfigDTO findOverride(String id) {
+    public DynamicConfigDTO findOverride(String id, boolean isService) {
         if (StringUtils.isEmpty(id)) {
             //throw exception
         }
-        String path = getPath(id);
+        String path = getPath(id, isService);
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             OverrideDTO overrideDTO = YamlParser.loadObject(config, OverrideDTO.class);
@@ -222,7 +225,7 @@
     public void saveWeight(WeightDTO weightDTO) {
         String id = ConvertUtil.getIdFromDTO(weightDTO);
         String scope = ConvertUtil.getScopeFromDTO(weightDTO);
-        String path = getPath(id);
+        String path = getPath(id, scope.equals(Constants.SERVICE));
         String config = dynamicConfiguration.getConfig(path);
         OverrideConfig overrideConfig = OverrideUtils.weightDTOtoConfig(weightDTO);
         OverrideDTO overrideDTO = insertConfig(config, overrideConfig, id, scope, Constants.WEIGHT);
@@ -239,7 +242,7 @@
     public void updateWeight(WeightDTO weightDTO) {
         String id = ConvertUtil.getIdFromDTO(weightDTO);
         String scope = ConvertUtil.getScopeFromDTO(weightDTO);
-        String path = getPath(id);
+        String path = getPath(id, scope.equals(Constants.SERVICE));
         String config = dynamicConfiguration.getConfig(path);
         WeightDTO oldWeight = null;
         if (config != null) {
@@ -275,8 +278,8 @@
     }
 
     @java.lang.Override
-    public void deleteWeight(String id) {
-        String path = getPath(id);
+    public void deleteWeight(String id, boolean isService) {
+        String path = getPath(id, isService);
         String config = dynamicConfiguration.getConfig(path);
         OverrideConfig oldConfig = null;
         if (config != null) {
@@ -310,8 +313,8 @@
     }
 
     @java.lang.Override
-    public WeightDTO findWeight(String id) {
-        String path = getPath(id);
+    public WeightDTO findWeight(String id, boolean isService) {
+        String path = getPath(id, isService);
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             OverrideDTO overrideDTO = YamlParser.loadObject(config, OverrideDTO.class);
@@ -332,7 +335,7 @@
     public void saveBalance(BalancingDTO balancingDTO) {
         String id = ConvertUtil.getIdFromDTO(balancingDTO);
         String scope = ConvertUtil.getScopeFromDTO(balancingDTO);
-        String path = getPath(id);
+        String path = getPath(id, scope.equals(Constants.SERVICE));
         String config = dynamicConfiguration.getConfig(path);
         OverrideConfig overrideConfig = OverrideUtils.balancingDTOtoConfig(balancingDTO);
         OverrideDTO overrideDTO = insertConfig(config, overrideConfig, id, scope, Constants.BALANCING);
@@ -349,7 +352,7 @@
     public void updateBalance(BalancingDTO balancingDTO) {
         String id = ConvertUtil.getIdFromDTO(balancingDTO);
         String scope = ConvertUtil.getScopeFromDTO(balancingDTO);
-        String path = getPath(id);
+        String path = getPath(id, scope.equals(Constants.SERVICE));
         String config = dynamicConfiguration.getConfig(path);
         BalancingDTO oldBalancing = null;
         if (config != null) {
@@ -383,8 +386,8 @@
     }
 
     @java.lang.Override
-    public void deleteBalance(String id) {
-        String path = getPath(id);
+    public void deleteBalance(String id, boolean isService) {
+        String path = getPath(id, isService);
         String config = dynamicConfiguration.getConfig(path);
         OverrideConfig oldConfig = null;
         if (config != null) {
@@ -416,8 +419,8 @@
     }
 
     @java.lang.Override
-    public BalancingDTO findBalance(String id) {
-        String path = getPath(id);
+    public BalancingDTO findBalance(String id, boolean isService) {
+        String path = getPath(id, isService);
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             OverrideDTO overrideDTO = YamlParser.loadObject(config, OverrideDTO.class);
@@ -513,9 +516,11 @@
         }
         return result;
     }
-    private String getPath(String key) {
-        key = key.replace("/", "*");
-        return prefix + Constants.PATH_SEPARATOR + key + Constants.PATH_SEPARATOR + Constants.CONFIGURATOR;
+    private String getPath(String key, boolean isService) {
+        if (isService) {
+            key = Tool.encodeKey(key);
+        }
+        return prefix + Constants.PATH_SEPARATOR + Constants.DUBBO_GROUP + Constants.PATH_SEPARATOR + key + Constants.DOT + Constants.CONFIGURATOR;
     }
 
     private void unregisterWeight(WeightDTO weightDTO) {
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
index f7280cf..cec9150 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
@@ -20,6 +20,7 @@
 import org.apache.dubbo.admin.common.util.Constants;
 import org.apache.dubbo.admin.common.util.ConvertUtil;
 import org.apache.dubbo.admin.common.util.RouteUtils;
+import org.apache.dubbo.admin.common.util.Tool;
 import org.apache.dubbo.admin.common.util.YamlParser;
 import org.apache.dubbo.admin.model.domain.Route;
 import org.apache.dubbo.admin.model.dto.AccessDTO;
@@ -42,7 +43,8 @@
     @Override
     public void createConditionRoute(ConditionRouteDTO conditionRoute) {
         String id = ConvertUtil.getIdFromDTO(conditionRoute);
-        String path = getPath(id, Constants.CONDITION_ROUTE);
+        String type = ConvertUtil.getScopeFromDTO(conditionRoute);
+        String path = getPath(id, Constants.CONDITION_ROUTE, type.equals(Constants.SERVICE));
         String existConfig = dynamicConfiguration.getConfig(path);
         RoutingRule existRule = null;
         if (existConfig != null) {
@@ -63,7 +65,8 @@
     @Override
     public void updateConditionRoute(ConditionRouteDTO newConditionRoute) {
         String id = ConvertUtil.getIdFromDTO(newConditionRoute);
-        String path = getPath(id, Constants.CONDITION_ROUTE);
+        String type = ConvertUtil.getScopeFromDTO(newConditionRoute);
+        String path = getPath(id, Constants.CONDITION_ROUTE, type.equals(Constants.SERVICE));
         String existConfig = dynamicConfiguration.getConfig(path);
         if (existConfig == null) {
             throw new ResourceNotFoundException("no existing condition route for path: " + path);
@@ -83,11 +86,11 @@
     }
 
     @Override
-    public void deleteConditionRoute(String id) {
+    public void deleteConditionRoute(String id, boolean isService) {
         if (StringUtils.isEmpty(id)) {
             // throw exception
         }
-        String path = getPath(id, Constants.CONDITION_ROUTE);
+        String path = getPath(id, Constants.CONDITION_ROUTE, isService);
         String config = dynamicConfiguration.getConfig(path);
         if (config == null) {
             //throw exception
@@ -111,8 +114,8 @@
     }
 
     @Override
-    public void deleteAccess(String id) {
-        String path = getPath(id, Constants.CONDITION_ROUTE);
+    public void deleteAccess(String id, boolean isService) {
+        String path = getPath(id, Constants.CONDITION_ROUTE, isService);
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             RoutingRule ruleDTO = YamlParser.loadObject(config, RoutingRule.class);
@@ -135,7 +138,8 @@
     @Override
     public void createAccess(AccessDTO accessDTO) {
         String id = ConvertUtil.getIdFromDTO(accessDTO);
-        String path = getPath(id, Constants.CONDITION_ROUTE);
+        String scope = ConvertUtil.getScopeFromDTO(accessDTO);
+        String path = getPath(id, Constants.CONDITION_ROUTE, scope.equals(Constants.SERVICE));
         String config = dynamicConfiguration.getConfig(path);
         List<String> blackWhiteList = RouteUtils.convertToBlackWhiteList(accessDTO);
         RoutingRule ruleDTO;
@@ -168,8 +172,8 @@
     }
 
     @Override
-    public AccessDTO findAccess(String id) {
-        String path = getPath(id, Constants.CONDITION_ROUTE);
+    public AccessDTO findAccess(String id, boolean isService) {
+        String path = getPath(id, Constants.CONDITION_ROUTE, isService);
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             RoutingRule ruleDTO = YamlParser.loadObject(config, RoutingRule.class);
@@ -182,7 +186,8 @@
     @Override
     public void updateAccess(AccessDTO accessDTO) {
         String key = ConvertUtil.getIdFromDTO(accessDTO);
-        String path = getPath(key, Constants.CONDITION_ROUTE);
+        String scope = ConvertUtil.getScopeFromDTO(accessDTO);
+        String path = getPath(key, Constants.CONDITION_ROUTE, scope.equals(Constants.SERVICE));
         List<String> blackWhiteList = RouteUtils.convertToBlackWhiteList(accessDTO);
         String config = dynamicConfiguration.getConfig(path);
         List<String> oldList = null;
@@ -205,8 +210,8 @@
     }
 
     @Override
-    public void enableConditionRoute(String id) {
-        String path = getPath(id, Constants.CONDITION_ROUTE);
+    public void enableConditionRoute(String id, boolean isService) {
+        String path = getPath(id, Constants.CONDITION_ROUTE, isService);
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             RoutingRule ruleDTO = YamlParser.loadObject(config, RoutingRule.class);
@@ -227,8 +232,8 @@
     }
 
     @Override
-    public void disableConditionRoute(String serviceName) {
-        String path = getPath(serviceName, Constants.CONDITION_ROUTE);
+    public void disableConditionRoute(String serviceName, boolean isService) {
+        String path = getPath(serviceName, Constants.CONDITION_ROUTE, isService);
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             RoutingRule routeRule = YamlParser.loadObject(config, RoutingRule.class);
@@ -249,8 +254,8 @@
     }
 
     @Override
-    public ConditionRouteDTO findConditionRoute(String id) {
-        String path = getPath(id, Constants.CONDITION_ROUTE);
+    public ConditionRouteDTO findConditionRoute(String id, boolean isService) {
+        String path = getPath(id, Constants.CONDITION_ROUTE, isService);
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             RoutingRule routingRule = YamlParser.loadObject(config, RoutingRule.class);
@@ -267,7 +272,7 @@
     @Override
     public void createTagRoute(TagRouteDTO tagRoute) {
         String id = ConvertUtil.getIdFromDTO(tagRoute);
-        String path = getPath(id,Constants.TAG_ROUTE);
+        String path = getPath(id,Constants.TAG_ROUTE, false);
         TagRoute store = RouteUtils.convertTagroutetoStore(tagRoute);
         dynamicConfiguration.setConfig(path, YamlParser.dumpObject(store));
     }
@@ -275,7 +280,7 @@
     @Override
     public void updateTagRoute(TagRouteDTO tagRoute) {
         String id = ConvertUtil.getIdFromDTO(tagRoute);
-        String path = getPath(id, Constants.TAG_ROUTE);
+        String path = getPath(id, Constants.TAG_ROUTE, false);
         if (dynamicConfiguration.getConfig(path) == null) {
             throw new ResourceNotFoundException("can not find tagroute: " + id);
             //throw exception
@@ -287,13 +292,13 @@
 
     @Override
     public void deleteTagRoute(String id) {
-        String path = getPath(id, Constants.TAG_ROUTE);
+        String path = getPath(id, Constants.TAG_ROUTE, false);
         dynamicConfiguration.deleteConfig(path);
     }
 
     @Override
     public void enableTagRoute(String id) {
-        String path = getPath(id, Constants.TAG_ROUTE);
+        String path = getPath(id, Constants.TAG_ROUTE, false);
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             TagRoute tagRoute = YamlParser.loadObject(config, TagRoute.class);
@@ -305,7 +310,7 @@
 
     @Override
     public void disableTagRoute(String id) {
-        String path = getPath(id, Constants.TAG_ROUTE);
+        String path = getPath(id, Constants.TAG_ROUTE, false);
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             TagRoute tagRoute = YamlParser.loadObject(config, TagRoute.class);
@@ -317,7 +322,7 @@
 
     @Override
     public TagRouteDTO findTagRoute(String id) {
-        String path = getPath(id, Constants.TAG_ROUTE);
+        String path = getPath(id, Constants.TAG_ROUTE, false);
         String config = dynamicConfiguration.getConfig(path);
         if (config != null) {
             TagRoute tagRoute = YamlParser.loadObject(config, TagRoute.class);
@@ -326,12 +331,14 @@
         return null;
     }
 
-    private String getPath(String key, String type) {
-        key = key.replace("/", "*");
+    private String getPath(String key, String type, boolean isService) {
+        if (isService) {
+            key = Tool.encodeKey(key);
+        }
         if (type.equals(Constants.CONDITION_ROUTE)) {
-            return prefix + Constants.PATH_SEPARATOR + key + Constants.PATH_SEPARATOR + "condition-router";
+            return prefix + Constants.PATH_SEPARATOR + Constants.DUBBO_GROUP + Constants.PATH_SEPARATOR + key + Constants.DOT + "condition-router";
         } else {
-            return prefix + Constants.PATH_SEPARATOR + key + Constants.PATH_SEPARATOR + "tag-router";
+            return prefix + Constants.PATH_SEPARATOR + Constants.DUBBO_GROUP + Constants.PATH_SEPARATOR + key + Constants.DOT + "tag-router";
         }
     }
 
diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java
index e087898..a2563bd 100644
--- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java
+++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java
@@ -20,6 +20,7 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.dubbo.admin.AbstractSpringIntegrationTest;
+import org.apache.dubbo.admin.common.util.Constants;
 import org.apache.dubbo.admin.model.dto.AccessDTO;
 import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
 import org.apache.dubbo.admin.service.ProviderService;
@@ -72,14 +73,14 @@
 
         // when application is present
         String application = "applicationName";
-        when(routeService.findAccess(application)).thenReturn(accessDTO);
+        when(routeService.findAccess(application, false)).thenReturn(accessDTO);
         response = restTemplate.getForEntity(url("/api/{env}/rules/access?application={application}"), String.class, env, application);
         exceptResponseBody = objectMapper.writeValueAsString(Collections.singletonList(accessDTO));
         assertEquals(exceptResponseBody, response.getBody());
 
         // when service is present
         String service = "serviceName";
-        when(routeService.findAccess(service)).thenReturn(accessDTO);
+        when(routeService.findAccess(service, true)).thenReturn(accessDTO);
         response = restTemplate.getForEntity(url("/api/{env}/rules/access?service={service}"), String.class, env, service);
         exceptResponseBody = objectMapper.writeValueAsString(Collections.singletonList(accessDTO));
         assertEquals(exceptResponseBody, response.getBody());
@@ -89,8 +90,8 @@
     public void detailAccess() throws JsonProcessingException {
         String id = "1";
         AccessDTO accessDTO = new AccessDTO();
-        when(routeService.findAccess(id)).thenReturn(accessDTO);
-        ResponseEntity<String> response = restTemplate.getForEntity(url("/api/{env}/rules/access/{id}"), String.class, env, id);
+        when(routeService.findAccess(id, false)).thenReturn(accessDTO);
+        ResponseEntity<String> response = restTemplate.getForEntity(url("/api/{env}/rules/access/{type}/{id}"), String.class, env, Constants.APPLICATION, id);
         String exceptResponseBody = objectMapper.writeValueAsString(accessDTO);
         assertEquals(exceptResponseBody, response.getBody());
     }
@@ -98,8 +99,8 @@
     @Test
     public void deleteAccess() {
         String id = "1";
-        restTemplate.delete(url("/api/{env}/rules/access/{id}"), env, id);
-        verify(routeService).deleteAccess(id);
+        restTemplate.delete(url("/api/{env}/rules/access/{type}/{id}"), env, Constants.APPLICATION, id);
+        verify(routeService).deleteAccess(id,false);
     }
 
     @Test
@@ -126,12 +127,13 @@
     public void updateAccess() throws IOException {
         AccessDTO accessDTO = new AccessDTO();
         String id = "1";
+        accessDTO.setApplication(id);
         // when id is 'Unknown ID'
         restTemplate.put(url("/api/{env}/rules/access/{id}"), accessDTO, env, id);
-        verify(routeService).findConditionRoute(id);
+        verify(routeService).findConditionRoute(id, false);
         //
         ConditionRouteDTO conditionRouteDTO = mock(ConditionRouteDTO.class);
-        when(routeService.findConditionRoute(id)).thenReturn(conditionRouteDTO);
+        when(routeService.findConditionRoute(id, false)).thenReturn(conditionRouteDTO);
         restTemplate.put(url("/api/{env}/rules/access/{id}"), accessDTO, env, id);
         verify(routeService).updateAccess(any(AccessDTO.class));
     }
diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java
index ad7a340..7526322 100644
--- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java
+++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java
@@ -18,6 +18,7 @@
 package org.apache.dubbo.admin.controller;
 
 import org.apache.dubbo.admin.AbstractSpringIntegrationTest;
+import org.apache.dubbo.admin.common.util.Constants;
 import org.apache.dubbo.admin.common.util.YamlParser;
 import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
 import org.apache.dubbo.admin.model.store.RoutingRule;
@@ -118,7 +119,7 @@
         + "priority: 0\n"
         + "runtime: false\n"
         + "scope: service";
-    String path = "/dubbo/config/" + service + "/condition-router";
+    String path = "/dubbo/config/dubbo/" + service  + ":" + ":" + ".condition-router";
     zkClient.create().creatingParentContainersIfNeeded().forPath(path);
     zkClient.setData().forPath(path, content.getBytes());
 
@@ -152,7 +153,7 @@
         + "priority: 0\n"
         + "runtime: false\n"
         + "scope: service";
-    String path = "/dubbo/config/" + service + "/condition-router";
+    String path = "/dubbo/config/dubbo/" + service  + ":" + ":" + ".condition-router";
     zkClient.create().creatingParentContainersIfNeeded().forPath(path);
     zkClient.setData().forPath(path, content.getBytes());
 
@@ -183,15 +184,15 @@
         + "priority: 0\n"
         + "runtime: false\n"
         + "scope: service";
-    String path = "/dubbo/config/" + service + "/condition-router";
+    String path = "/dubbo/config/dubbo/" + service + ":" + ":" + ".condition-router";
     zkClient.create().creatingParentContainersIfNeeded().forPath(path);
     zkClient.setData().forPath(path, content.getBytes());
 
     assertNotNull("zk path should not be null before deleting", zkClient.checkExists().forPath(path));
 
     ResponseEntity<String> responseEntity = restTemplate.exchange(
-        url("/api/{env}/rules/route/condition/{service}"), HttpMethod.DELETE,
-        null, String.class, env, service
+        url("/api/{env}/rules/route/condition/{type}/{service}"), HttpMethod.DELETE,
+        null, String.class, env, Constants.SERVICE, service
     );
     assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK));
 
@@ -201,7 +202,7 @@
   @Test
   public void shouldThrowWhenDetailRouteWithUnknownId() {
     ResponseEntity<String> responseEntity = restTemplate.getForEntity(
-        url("/api/{env}/rules/route/condition/{id}"), String.class, env, "non-existed-service"
+        url("/api/{env}/rules/route/condition/{type}/{id}"), String.class, env, Constants.SERVICE, "non-existed-service"
     );
     assertThat(responseEntity.getStatusCode(), is(HttpStatus.NOT_FOUND));
   }
@@ -218,12 +219,12 @@
         + "priority: 0\n"
         + "runtime: false\n"
         + "scope: service";
-    String path = "/dubbo/config/" + service + "/condition-router";
+    String path = "/dubbo/config/dubbo/" + service  + ":" + ":" + ".condition-router";
     zkClient.create().creatingParentContainersIfNeeded().forPath(path);
     zkClient.setData().forPath(path, content.getBytes());
 
     ResponseEntity<ConditionRouteDTO> responseEntity = restTemplate.getForEntity(
-        url("/api/{env}/rules/route/condition/{id}"), ConditionRouteDTO.class, env, service
+        url("/api/{env}/rules/route/condition/{type}/{id}"), ConditionRouteDTO.class, env, Constants.SERVICE, service
     );
     assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK));
 
@@ -245,7 +246,7 @@
         + "priority: 0\n"
         + "runtime: false\n"
         + "scope: service";
-    String path = "/dubbo/config/" + service + "/condition-router";
+    String path = "/dubbo/config/dubbo/" + service + ":" + ":" + ".condition-router";
     zkClient.create().creatingParentContainersIfNeeded().forPath(path);
     zkClient.setData().forPath(path, content.getBytes());
 
@@ -254,7 +255,7 @@
     RoutingRule rule = YamlParser.loadObject(updatedConfig, RoutingRule.class);
     assertFalse(rule.isEnabled());
 
-    restTemplate.put(url("/api/{env}/rules/route/condition/enable/{id}"), null, env, service);
+    restTemplate.put(url("/api/{env}/rules/route/condition/enable/{type}/{id}"), null, env, Constants.SERVICE, service);
 
     bytes = zkClient.getData().forPath(path);
     updatedConfig = new String(bytes);
@@ -274,7 +275,7 @@
         + "priority: 0\n"
         + "runtime: false\n"
         + "scope: service";
-    String path = "/dubbo/config/" + service + "/condition-router";
+    String path = "/dubbo/config/dubbo/" + service + ":" + ":" + ".condition-router";
     zkClient.create().creatingParentContainersIfNeeded().forPath(path);
     zkClient.setData().forPath(path, content.getBytes());
 
@@ -283,7 +284,7 @@
     RoutingRule rule = YamlParser.loadObject(updatedConfig, RoutingRule.class);
     assertTrue(rule.isEnabled());
 
-    restTemplate.put(url("/api/{env}/rules/route/condition/disable/{id}"), null, env, service);
+    restTemplate.put(url("/api/{env}/rules/route/condition/disable/{type}/{id}"), null, env, Constants.SERVICE, service);
 
     bytes = zkClient.getData().forPath(path);
     updatedConfig = new String(bytes);
diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java
index acade40..73b60ce 100644
--- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java
+++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java
@@ -19,6 +19,7 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.dubbo.admin.AbstractSpringIntegrationTest;
+import org.apache.dubbo.admin.common.util.Constants;
 import org.apache.dubbo.admin.model.dto.BalancingDTO;
 import org.apache.dubbo.admin.service.OverrideService;
 import org.apache.dubbo.admin.service.ProviderService;
@@ -40,7 +41,6 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -89,6 +89,7 @@
     public void updateLoadbalance() throws IOException {
         String id = "1";
         BalancingDTO balancingDTO = new BalancingDTO();
+        balancingDTO.setApplication(id);
         URI uri;
         ResponseEntity<String> response;
         // unknown id
@@ -96,7 +97,7 @@
         assertFalse("should return a fail response, when id is null", (Boolean) objectMapper.readValue(response.getBody(), Map.class).get("success"));
         // valid id
         BalancingDTO balancing = mock(BalancingDTO.class);
-        when(overrideService.findBalance(id)).thenReturn(balancing);
+        when(overrideService.findBalance(id, false)).thenReturn(balancing);
         assertTrue(restTemplate.exchange(url("/api/{env}/rules/balancing/{id}"), HttpMethod.PUT, new HttpEntity<>(balancingDTO, null), Boolean.class, env, id).getBody());
         verify(overrideService).saveBalance(any(BalancingDTO.class));
     }
@@ -111,14 +112,15 @@
         // service is valid
         response = restTemplate.getForEntity(url("/api/{env}/rules/balancing?service={service}&application={application}"), String.class, env, service, null);
         assertEquals(HttpStatus.OK, response.getStatusCode());
-        verify(overrideService).findBalance(service);
+        verify(overrideService).findBalance(service, true);
         // application is valid
         response = restTemplate.getForEntity(url("/api/{env}/rules/balancing?service={service}&application={application}"), String.class, env, null, application);
         assertEquals(HttpStatus.OK, response.getStatusCode());
-        verify(overrideService).findBalance(application);
+        verify(overrideService).findBalance(application, false);
         // findBalance return a notnull
         BalancingDTO balancingDTO = new BalancingDTO();
-        when(overrideService.findBalance(anyString())).thenReturn(balancingDTO);
+        balancingDTO.setApplication("1");
+        when(overrideService.findBalance(application, false)).thenReturn(balancingDTO);
         response = restTemplate.getForEntity(url("/api/{env}/rules/balancing?service={service}&application={application}"), String.class, env, null, application);
         assertEquals(HttpStatus.OK, response.getStatusCode());
         assertEquals(1, objectMapper.readValue(response.getBody(), List.class).size());
@@ -129,12 +131,12 @@
         String id = "1";
         ResponseEntity<String> response;
         // when balancing is not exist
-        response = restTemplate.getForEntity(url("/api/{env}/rules/balancing/{id}"), String.class, env, id);
+        response = restTemplate.getForEntity(url("/api/{env}/rules/balancing/{type}/{id}"), String.class, env, Constants.APPLICATION, id);
         assertFalse("should return a fail response, when id is null", (Boolean) objectMapper.readValue(response.getBody(), Map.class).get("success"));
         // when balancing is not null
         BalancingDTO balancingDTO = new BalancingDTO();
-        when(overrideService.findBalance(id)).thenReturn(balancingDTO);
-        response = restTemplate.getForEntity(url("/api/{env}/rules/balancing/{id}"), String.class, env, id);
+        when(overrideService.findBalance(id, false)).thenReturn(balancingDTO);
+        response = restTemplate.getForEntity(url("/api/{env}/rules/balancing/{type}/{id}"), String.class, env, Constants.APPLICATION, id);
         assertEquals(HttpStatus.OK, response.getStatusCode());
     }
 
@@ -144,7 +146,7 @@
         URI uri;
         ResponseEntity<String> response;
 
-        response = restTemplate.exchange(url("/api/{env}/rules/balancing/{id}"), HttpMethod.DELETE, new HttpEntity<>(null), String.class, env, id);
+        response = restTemplate.exchange(url("/api/{env}/rules/balancing/{type}/{id}"), HttpMethod.DELETE, new HttpEntity<>(null), String.class, env, Constants.APPLICATION, id);
         assertEquals(HttpStatus.OK, response.getStatusCode());
         assertTrue(Boolean.valueOf(response.getBody()));
     }
diff --git a/dubbo-admin-ui/src/components/governance/AccessControl.vue b/dubbo-admin-ui/src/components/governance/AccessControl.vue
index 40aa3ed..961835d 100644
--- a/dubbo-admin-ui/src/components/governance/AccessControl.vue
+++ b/dubbo-admin-ui/src/components/governance/AccessControl.vue
@@ -502,7 +502,8 @@
       })
     },
     deleteItem (id) {
-      this.$axios.delete('/rules/access/' + id)
+      let type = this.items[this.selected].value
+      this.$axios.delete('/rules/access/' + type + '/' + id)
       .then(response => {
         this.showSnackbar('success', 'Delete success')
         this.search(this.filter)
diff --git a/dubbo-admin-ui/src/components/governance/LoadBalance.vue b/dubbo-admin-ui/src/components/governance/LoadBalance.vue
index 905a790..5a902e3 100644
--- a/dubbo-admin-ui/src/components/governance/LoadBalance.vue
+++ b/dubbo-admin-ui/src/components/governance/LoadBalance.vue
@@ -420,6 +420,7 @@
       },
       itemOperation: function (icon, item) {
         let itemId = ''
+        let type = this.items[this.selected].value
         if (this.selected === 0) {
           itemId = item.service
         } else {
@@ -430,7 +431,7 @@
         }
         switch (icon) {
           case 'visibility':
-            this.$axios.get('/rules/balancing/' + itemId)
+            this.$axios.get('/rules/balancing/' + type + '/' + itemId)
               .then(response => {
                 let balancing = response.data
                 this.handleBalance(balancing, true)
@@ -438,7 +439,7 @@
               })
             break
           case 'edit':
-            this.$axios.get('/rules/balancing/' + itemId)
+            this.$axios.get('/rules/balancing/' + type + '/' + itemId)
               .then(response => {
                 let balancing = response.data
                 this.handleBalance(balancing, false)
@@ -467,7 +468,8 @@
         this.height = window.innerHeight * 0.5
       },
       deleteItem: function (id) {
-        this.$axios.delete('/rules/balancing/' + id)
+        let type = this.items[this.selected].value
+        this.$axios.delete('/rules/balancing/' + type + '/' + id)
           .then(response => {
             if (response.status === 200) {
               this.warn = false
diff --git a/dubbo-admin-ui/src/components/governance/Overrides.vue b/dubbo-admin-ui/src/components/governance/Overrides.vue
index 5ffedd4..ef38bdc 100644
--- a/dubbo-admin-ui/src/components/governance/Overrides.vue
+++ b/dubbo-admin-ui/src/components/governance/Overrides.vue
@@ -374,6 +374,7 @@
       },
       itemOperation: function (icon, item) {
         let itemId = ''
+        let type = this.items[this.selected].value
         if (this.selected === 0) {
           itemId = item.service
         } else {
@@ -384,7 +385,7 @@
         }
         switch (icon) {
           case 'visibility':
-            this.$axios.get('/rules/override/' + itemId)
+            this.$axios.get('/rules/override/' + type + '/' + itemId)
               .then(response => {
                 let config = response.data
                 this.handleConfig(config, true)
@@ -392,7 +393,7 @@
               })
             break
           case 'edit':
-            this.$axios.get('/rules/override/' + itemId)
+            this.$axios.get('/rules/override/' + type + '/' + itemId)
               .then(response => {
                 let config = response.data
                 this.handleConfig(config, false)
@@ -443,9 +444,10 @@
       },
       deleteItem: function (warnStatus) {
         let id = warnStatus.id
+        let type = this.items[this.selected].value
         let operation = warnStatus.operation
         if (operation === 'delete') {
-          this.$axios.delete('/rules/override/' + id)
+          this.$axios.delete('/rules/override/' + type + '/' + id)
             .then(response => {
               if (response.status === 200) {
                 this.warn = false
@@ -454,7 +456,7 @@
               }
             })
         } else if (operation === 'disable') {
-          this.$axios.put('/rules/override/disable/' + id)
+          this.$axios.put('/rules/override/disable/' + type + '/' + id)
             .then(response => {
               if (response.status === 200) {
                 this.warn = false
@@ -463,7 +465,7 @@
               }
             })
         } else if (operation === 'enable') {
-          this.$axios.put('/rules/override/enable/' + id)
+          this.$axios.put('/rules/override/enable/' + type + '/' + id)
             .then(response => {
               if (response.status === 200) {
                 this.warn = false
diff --git a/dubbo-admin-ui/src/components/governance/RoutingRule.vue b/dubbo-admin-ui/src/components/governance/RoutingRule.vue
index 7e86c30..c81cb3d 100644
--- a/dubbo-admin-ui/src/components/governance/RoutingRule.vue
+++ b/dubbo-admin-ui/src/components/governance/RoutingRule.vue
@@ -392,6 +392,7 @@
       },
       itemOperation: function (icon, item) {
         let itemId = ''
+        let type = this.items[this.selected].value
         if (this.selected === 0) {
           itemId = item.service
         } else {
@@ -403,7 +404,7 @@
         }
         switch (icon) {
           case 'visibility':
-            this.$axios.get('/rules/route/condition/' + itemId)
+            this.$axios.get('/rules/route/condition/' + type + '/' + itemId)
               .then(response => {
                 let conditionRoute = response.data
                 this.handleBalance(conditionRoute, true)
@@ -411,7 +412,7 @@
               })
             break
           case 'edit':
-            this.$axios.get('/rules/route/condition/' + itemId)
+            this.$axios.get('/rules/route/condition/' + type + '/' + itemId)
               .then(response => {
                 let conditionRoute = response.data
                 this.handleBalance(conditionRoute, false)
@@ -452,9 +453,10 @@
       },
       deleteItem: function (warnStatus) {
         let id = warnStatus.id
+        let type = this.items[this.selected].value
         let operation = warnStatus.operation
         if (operation === 'delete') {
-          this.$axios.delete('/rules/route/condition/' + id)
+          this.$axios.delete('/rules/route/condition/' + type + '/' + id)
             .then(response => {
               if (response.status === 200) {
                 this.warn = false
@@ -463,7 +465,7 @@
               }
             })
         } else if (operation === 'disable') {
-          this.$axios.put('/rules/route/condition/disable/' + id)
+          this.$axios.put('/rules/route/condition/disable/' + type + '/' + id)
             .then(response => {
               if (response.status === 200) {
                 this.warn = false
@@ -472,7 +474,7 @@
               }
             })
         } else if (operation === 'enable') {
-          this.$axios.put('/rules/route/condition/enable/' + id)
+          this.$axios.put('/rules/route/condition/enable/' + type + '/' + id)
             .then(response => {
               if (response.status === 200) {
                 this.warn = false
diff --git a/dubbo-admin-ui/src/components/governance/WeightAdjust.vue b/dubbo-admin-ui/src/components/governance/WeightAdjust.vue
index d530fbc..0615116 100644
--- a/dubbo-admin-ui/src/components/governance/WeightAdjust.vue
+++ b/dubbo-admin-ui/src/components/governance/WeightAdjust.vue
@@ -407,6 +407,7 @@
       },
       itemOperation: function (icon, item) {
         let itemId = ''
+        let type = this.items[this.selected].value
         if (this.selected === 0) {
           itemId = item.service
         } else {
@@ -417,7 +418,7 @@
         }
         switch (icon) {
           case 'visibility':
-            this.$axios.get('/rules/weight/' + itemId)
+            this.$axios.get('/rules/weight/' + type + '/' + itemId)
                 .then(response => {
                   let weight = response.data
                   this.handleWeight(weight, true)
@@ -425,7 +426,7 @@
                 })
             break
           case 'edit':
-            this.$axios.get('/rules/weight/' + itemId)
+            this.$axios.get('/rules/weight/' + type + '/' + itemId)
                 .then(response => {
                   let weight = response.data
                   this.handleWeight(weight, false)
@@ -453,7 +454,8 @@
         this.height = window.innerHeight * 0.5
       },
       deleteItem: function (warnStatus) {
-        this.$axios.delete('/rules/weight/' + warnStatus.id)
+        let type = this.items[this.selected].value
+        this.$axios.delete('/rules/weight/' + type + '/' + warnStatus.id)
           .then(response => {
             if (response.status === 200) {
               this.warn = false