This commit is contained in:
Alexey Berezhok
2026-07-05 12:25:44 +03:00
parent ae6dc4aada
commit 6e462a5921
6 changed files with 325 additions and 28 deletions

View File

@@ -27,12 +27,23 @@ cp utils/build_mod_rewrite.py %{buildroot}/usr/local/ispmanager-mod_rewrite/util
%triggerin -- nginx %triggerin -- nginx
/usr/local/ispmanager-mod_rewrite/utils/build_mod_rewrite.py /usr/local/ispmanager-mod_rewrite/utils/build_mod_rewrite.py
%posttrans
killall core
if [ "$1" == "1" ]; then
rm -rf /usr/local/mgr5/var/.db.cache*
/usr/local/mgr5/sbin/mgrctl -m ispmgr exit
fi
%files %files
/usr/local/mgr5/etc/xml/ispmgr_mod_nginx_mod_rewrite_plugin.xml /usr/local/mgr5/etc/xml/ispmgr_mod_nginx_mod_rewrite_plugin.xml
/usr/local/mgr5/etc/plugins/ispmgr/nginx_mod_rewrite_plugin.xml /usr/local/mgr5/etc/plugins/ispmgr/nginx_mod_rewrite_plugin.xml
%attr(700, root, root) /usr/local/mgr5/addon/nginx_mod_rewrite_plugin.py %attr(700, root, root) /usr/local/mgr5/addon/nginx_mod_rewrite_plugin.py
%attr(700, root, root) /usr/local/mgr5/addon/nginx_form_rewrite_plugin.py
%attr(600, root, root) /usr/local/ispmanager-mod_rewrite/mod_rewrite.zip %attr(600, root, root) /usr/local/ispmanager-mod_rewrite/mod_rewrite.zip
%attr(700, root, root) /usr/local/ispmanager-mod_rewrite/utils/build_mod_rewrite.py %attr(700, root, root) /usr/local/ispmanager-mod_rewrite/utils/build_mod_rewrite.py
%attr(644, root, root) /usr/local/mgr5/skins/icons/mod_rewrite_menu.svg
%attr(644, root, root) /usr/local/mgr5/skins/icons/mod_rewrite_tool.svg
%attr(644, root, root) /usr/local/mgr5/etc/sql/webdomain.addon/nginx_mod_rewrite_plugin
%changelog %changelog
* Mon Jun 29 2026 Alexey BayRepo <a@bayrepo.ru> - 0.0.1-1 * Mon Jun 29 2026 Alexey BayRepo <a@bayrepo.ru> - 0.0.1-1

View File

@@ -0,0 +1,34 @@
#!/usr/bin/env python3
import os
import xml.etree.ElementTree as etree
from sys import stdin
import re
def check_nginx_rewrite_module():
config_path = "/usr/share/nginx/modules/ngx_http_apache_rewrite_module.conf"
if not os.path.exists(config_path):
return False
pattern = re.compile(r'^\s*load_module\s+"\/usr\/lib64\/nginx\/modules\/ngx_http_apache_rewrite_module.so";\s*$')
with open(config_path, 'r') as f:
for line in f:
stripped = line.lstrip()
if stripped.startswith('#'):
continue
if pattern.match(line):
return True
return False
if __name__ == "__main__":
root = etree.parse(stdin).getroot()
func = os.getenv('PARAM_func')
if func == 'nginx_mod_rewrite_plugin_menu_settings':
nginx_mod_rewrite_plugin_menu_module_enable = os.getenv("PARAM_nginx_mod_rewrite_plugin_menu_module_enable")
etree.dump(root)
quit(0)

View File

@@ -0,0 +1,4 @@
type=bool
access_read=user+
access_write=user+
default=false

View File

@@ -19,6 +19,46 @@
<button name="cancel" type="cancel" /> <button name="cancel" type="cancel" />
</buttons> </buttons>
</metadata> </metadata>
<metadata name="site.edit" type="form">
<form>
<page name="optimization">
<field name="site_nginx_mod_rewrite_plugin_site_edit_enable">
<input type="checkbox" name="site_nginx_mod_rewrite_plugin_site_edit_enable" setvalues="yes" />
</field>
</page>
</form>
</metadata>
<metadata name="webdomain.edit" type="form">
<form>
<page name="optimization">
<field name="nginx_mod_rewrite_plugin_site_edit_enable">
<input type="checkbox" name="nginx_mod_rewrite_plugin_site_edit_enable" setvalues="yes" />
</field>
</page>
</form>
</metadata>
<handler name="nginx_form_rewrite_plugin.py" type="xml">
<event name="webdomain.edit" after="yes"/>
<event name="site.edit" after="yes"/>
<func name="nginx_mod_rewrite_plugin_menu_settings"/>
</handler>
<mainmenu level="admin+">
<modernmenu>
<node name="nginx_mod_rewrite_plugin_menu" customicon="/manimg/icons/mod_rewrite_menu.svg">
<node name="nginx_mod_rewrite_plugin_menu_settings" customicon="/manimg/icons/mod_rewrite_tool.svg"/>
</node>
</modernmenu>
</mainmenu>
<metadata name="nginx_mod_rewrite_plugin_menu_settings" type="form">
<form needconfirm="yes">
<field name="nginx_mod_rewrite_plugin_menu_module_enable">
<input type="checkbox" name="nginx_mod_rewrite_plugin_menu_module_enable"/>
</field>
<field name="nginx_mod_rewrite_plugin_menu_global_module_enable">
<input type="checkbox" name="nginx_mod_rewrite_plugin_menu_global_module_enable"/>
</field>
</form>
</metadata>
<lang name="ru"> <lang name="ru">
<messages name="nginx_mod_rewrite_plugin.settings"> <messages name="nginx_mod_rewrite_plugin.settings">
<msg name="title">Установка модуля для nginx</msg> <msg name="title">Установка модуля для nginx</msg>
@@ -30,5 +70,18 @@
<msg name="msg_error_nginx_mod_rewrite_plugin">Ошибка модуля: __object__</msg> <msg name="msg_error_nginx_mod_rewrite_plugin">Ошибка модуля: __object__</msg>
<msg name="wrong_value">__value__</msg> <msg name="wrong_value">__value__</msg>
</messages> </messages>
<messages name="site.edit">
<msg name="site_nginx_mod_rewrite_plugin_site_edit_enable">Включить для сайта поддержку mod_rewrite для nginx</msg>
</messages>
<messages name="desktop">
<msg name="modernmenu_nginx_mod_rewrite_plugin_menu">mod_rewrite для nginx</msg>
<msg name="modernmenu_nginx_mod_rewrite_plugin_menu_settings">Настройка модуля nginx</msg>
</messages>
<messages name="nginx_mod_rewrite_plugin_menu_settings">
<msg name="title">Глобальные настройки mod_rewrite для nginx</msg>
<msg name="nginx_mod_rewrite_plugin_menu_module_enable">Добавить модуль в nginx</msg>
<msg name="nginx_mod_rewrite_plugin_menu_global_module_enable">Включать глобально для всех location сайта</msg>
<msg name="msg_create">Сохранить</msg>
</messages>
</lang> </lang>
</mgrdata> </mgrdata>

View File

@@ -0,0 +1,133 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="16"
height="16"
viewBox="0 0 4.23328 4.23328"
version="1.1"
id="svg5"
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
sodipodi:docname="mod_rewrite_menu.svg"
shape-rendering="crispEdges"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="px"
showgrid="true"
units="px"
width="15px"
inkscape:zoom="13.255892"
inkscape:cx="0.18859538"
inkscape:cy="-3.6210313"
inkscape:window-width="1920"
inkscape:window-height="1019"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
inkscape:showpageshadow="false"
showborder="true"
scale-x="0.36458">
<inkscape:grid
type="xygrid"
id="grid9" />
</sodipodi:namedview>
<defs
id="defs2">
<inkscape:path-effect
effect="bspline"
id="path-effect1725"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1721"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1689"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1685"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
</defs>
<g
inkscape:label="Слой 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
d="M 0.26458,0.52916 H 1.85206 L 3.43954,2.11664 V 3.9687 H 0.26458 Z"
id="path44"
sodipodi:nodetypes="cccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.26458px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1.05832,1.3229 c 0,0.617618 0,1.2349711 0,1.85206"
id="path1683"
inkscape:path-effect="#path-effect1685"
inkscape:original-d="m 1.05832,1.3229 c 2.646e-4,0.617618 2.646e-4,1.2349711 0,1.85206"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.26458px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1.05832,2.38122 c 0.1766513,0 0.3530379,0 0.4410989,0.1324249 C 1.58748,2.6460699 1.58748,2.9106446 1.58748,3.17496"
id="path1687"
inkscape:path-effect="#path-effect1689"
inkscape:original-d="m 1.05832,2.38122 c 0.1766513,2.646e-4 0.3530379,2.646e-4 0.52916,0 2.646e-4,0.2648499 2.646e-4,0.5294246 0,0.79374"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.26458px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1.85206,1.58748 c 0,0.353038 0,0.7058112 0.044177,0.9704195 0.044177,0.2646083 0.1323684,0.4409913 0.2206157,0.5290259 C 2.2051,3.17496 2.2932913,3.17496 2.38122,3.17496"
id="path1719"
inkscape:path-effect="#path-effect1721"
inkscape:original-d="m 1.85206,1.58748 c 2.646e-4,0.353038 2.646e-4,0.7058112 0,1.05832 0.08846,0.1766548 0.1766513,0.3530378 0.26458,0.52916 0.08846,2.646e-4 0.1766513,2.646e-4 0.26458,0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.26458px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1.85206,2.11664 c 0.1766513,0 0.3530379,0 0.52916,0"
id="path1723"
inkscape:path-effect="#path-effect1725"
inkscape:original-d="m 1.85206,2.11664 c 0.1766513,2.646e-4 0.3530379,2.646e-4 0.52916,0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.26458px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 2.38122,0.26458 3.9687,1.85206 V 0.26458 Z"
id="path3269" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
sodipodi:docname="mod_rewrite_tool.svg"
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
id="svg5"
version="1.1"
viewBox="0 0 4.2333332 4.2333334"
height="16"
width="16"
shape-rendering="crispEdges"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="px"
showgrid="true"
units="px"
width="15px"
inkscape:zoom="13.255892"
inkscape:cx="0.18859538"
inkscape:cy="-3.6210313"
inkscape:window-width="1920"
inkscape:window-height="1019"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
type="xygrid"
id="grid9" />
</sodipodi:namedview>
<defs
id="defs2" />
<g
inkscape:label="Слой 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
d="M 0.26458333,0.26458333 H 1.8520833 l 2.1166667,0 0,1.85208327 V 3.96875 H 0.26458333 Z"
id="path44"
sodipodi:nodetypes="ccccccc" />
<g
inkscape:label="Rendered Gears"
transform="matrix(0.91089865,0,0,0.9218829,1.8670605,2.3662564)"
id="g4791" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="M 1.8520833,1.0583333 V 1.5875 h 0.79375 V 1.0583333 H 3.175 V 2.1166667 H 2.6458333 V 2.6458333 H 3.175 v 0.79375 H 2.6458333 V 3.175 h -0.79375 V 3.4395833 H 1.3229167 v -0.79375 H 1.8520833 V 2.1166667 H 1.3229167 V 1.0583333 h 0.5291666"
id="path5631" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB