Действия

Tech Support Shared Hosting: различия между версиями

Материал из lulzette's wiki

 
(не показаны 92 промежуточные версии этого же участника)
Строка 1: Строка 1:
[[Category:Tech support]]
== Tools ==
== Tools ==


=== BOMB grep ===
=== BOMB grep ===


<code>grep -H -l -R $'\uFEFF' .</code>
<code>grep -I -H -l -R $'\uFEFF' .</code>
 
=== BOMB sed ===
 
<code>for i in `grep -H -l -R $'\uFEFF' .`; do sed -i '1s/^\xEF\xBB\xBF//' $i; done</code><br>
 
альтернативно:<br>
 
<code>grep -rlI $'\xEF\xBB\xBF' . | xargs perl -i -pe 's{\xEF\xBB\xBF}{}'</code>
 
мой варик: <br>
 
<code>grep -H -l -R $'\uFEFF' | xargs sed -i '1s/^\xEF\xBB\xBF//'</code><br> (должно сработать)


=== SQL alter/convert ===
=== SQL alter/convert ===
Строка 29: Строка 43:


=== wp-cli ===
=== wp-cli ===
full list: https://wp-kama.ru/handbook/cli/wp


<source>
<source>
Строка 54: Строка 70:
wp option get siteurl
wp option get siteurl


--- --- ---
</source>
</source>


=== битрих ругается на какой-то xss ===
=== UTF-8 в нечитабельном виде ===


<code>php_value mbstring.func_overload 2</code>
Юзаем питон:<br>
<code>python -c "print(b'кракозябры'.decode('utf-8'))"</code> <br>
 
Пример: <br>
<code>python -c "print(b'\xd0\xb2\xd1\x8b\xd0\xbf\xd0\xbe\xd0\xbb\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb9 '.decode('utf-8'))"</code>
 
u**** - unicode_escape


<source>
<source>
[Error] Call to undefined function mb_orig_strpos() (0) /public_html/bitrix/modules/security/classes/general/post_filter.php:320 #0: CSecurityXSSDetect::fastStrpos(string, string) /public_html/bitrix/modules/security/classes/general/post_filter.php:190 #1: CSecurityXSSDetect->findInArray(string, array) /public_html/bitrix/modules/security/classes/general/post_filter.php:221 #2: CSecurityXSSDetect->isDangerBody(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:237 #3: CSecurityXSSDetect->getFilteredScriptBody(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:262 #4: CSecurityXSSDetect->getFilteredScript(array) #5: preg_replace_callback(string, array, string) /public_html/bitrix/modules/security/classes/general/post_filter.php:274 #6: CSecurityXSSDetect->filter(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:72 #7: CSecurityXSSDetect->process(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:55 #8: CSecurityXSSDetect::OnEndBufferContent(string) /public_html/bitrix/modules/main/classes/general/module.php:490 #9: ExecuteModuleEventEx(array, array) /public_html/bitrix/modules/main/classes/general/main.php:3192 #10: CAllMain->EndBufferContent(string) /public_html/bitrix/modules/main/classes/general/main.php:3140 #11: CAllMain->EndBufferContentMan() /public_html/bitrix/modules/main/include/epilog_after.php:36 #12: require(string) /public_html/index.php:1
python -c "print(b'\u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0447\u0442\u044b \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439'.decode('unicode_escape'))"
На сайте возникла критическая ошибка. Пожалуйста, проверьте входящие сообщения почты администратора для дальнейших инструкций


</source>
</source>


=== UTF-8 в нечитабельном виде ===
=== logs nginx speed + logs smtp ===
 
<code>awk '{print $1, $2, $3, $15, $13}'</code>  - время ответа (nginx) <br>
<code>awk '{print $1, $2, $3, $16, $13}'</code> - код ответа http (для апача $16 -> $15)<br>
<code>awk '{print $1, $2, $3, $16, $15, $13}'</code> - код + время <br>
 
* Получить логи исходящих от ящика (смотрит по ID письма):
 
<code>logs s DATE | egrep $(logs s DATE | egrep FROM | grep '<=' | awk '{print $8, $14, $15}' | awk '{print $1}' | sort | uniq | tr '\n' '|' | rev | cut -c 2- | rev)</code><br>
 
либо
 
<code>for i in `logs s | grep '<=' | grep '@timeweb.ru' |awk '{print $8}'` ; do logs s | grep $i ; done</code>
 
* Получить логи входящих по ящику:
 
<code>logs x DATE | egrep $(logs x DATE | egrep FROM | grep '=>' | awk '{print $8, $14, $15}' | awk '{print $1}' | sort | uniq | tr '\n' '|' | rev | cut -c 2- | rev)</code><br>


Юзаем питон:<br>
=== проверить что апач пытается спавнить процессы на 2й схеме (недостаточно обработчиков) ===
<code>python -c "print(b'кракозябры'.decode('utf-8'))"</code> <br>


Пример: <br>
<code>logs e *servername* | grep etc/apache2/config</code>
<code>python -c "print(b'\xd0\xb2\xd1\x8b\xd0\xbf\xd0\xbe\xd0\xbb\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb9 '.decode('utf-8'))"</code>


=== logs nginx скорость/код ответа awk ===
=== awk more than ===


<code>awk '{print $1, $2, $3, $15, $13}'</code> - время ответа (nginx) <br>
<code> awk '{if ($1 > 300) print $1, $2;}'</code>
<code>awk '{print $1, $2, $3, $16, $13}'</code> - код ответа http (для апача $16 -> $15)


=== grep рекурсивно файлы ===
=== grep рекурсивно файлы ===
Строка 83: Строка 118:
<code>grep -H -l -R "pattern" .</code>
<code>grep -H -l -R "pattern" .</code>


игнорировать бинарные файлы, только текстовые - <code>-I</code>


=== SQL дубликаты в таблице ===
=== SQL дубликаты в таблице ===
Строка 88: Строка 124:
<code>SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1;</code>
<code>SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1;</code>


=== SQL for Wordpress ===
=== замена домена через SQL запросы, Wordpress ===
 
ГОТОВЫЕ ЗАПРОСЫ ДЛЯ ЗАМЕНЫ ДОМЕНА: https://rudrastyh.com/sql-queries-to-change-wordpress-website-domain


https://misha.blog/wordpress/sql-queries-domain.html   
https://misha.blog/wordpress/sql-queries-domain.html   


<code>UPDATE wp_posts SET post_content = REPLACE (post_content, 'OLD', 'NEW');</code> <br>
<code>UPDATE wp_posts SET post_content = REPLACE (post_content, 'OLD', 'NEW');</code> <br>
<code>UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'OLD', 'NEW');</code>
<code>UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'OLD', 'NEW');</code><br>
 
Если есть wp-cli, то все в разы проще + по всем таблицам:
 
<code>wp db export && wp search-replace "OLD" "NEW"</code>


=== PHP Mail ===
=== PHP Mail ===
Строка 101: Строка 143:
var_dump(mail("test@test.ru", "test", "test"));
var_dump(mail("test@test.ru", "test", "test"));
?>
?>
</source>
=== Python update virtualenv 16.x -> 20.x ===
<source>
*install as usual*
*activate*
python3 -m pip install virtualenv
python -m virtualenv --version
</source>
</source>


Строка 117: Строка 168:
</source>
</source>


== Docs ==
=== bitrix in cp1251 ===


=== редиректы в .htaccess ===
<source>
php_value default_charset "cp1251"
php_value mbstring.internal_encoding cp1251
php_value mbstring.func_overload 2
</source>


https://web-optimizator.com/301-redirekt-htaccess/
=== bitrix размер стека и pcre.recursion_limit ===


=== RewriteCond ===
<source>
Для этого добавил в файл .htaccess в корневой директории вашего аккаунта следующие директивы:
php_value pcre.jit 0
php_value pcre.recursion_limit 100000 - удалил
</source>


http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteCond
=== bitrix mysqli ===


<source>
<source>
REQUEST_URI
define("BX_USE_MYSQLI", true); # DBCONN.PHP
The path component of the requested URI, such as "/index.html". This notably excludes the query string which is available as as its own variable named QUERY_STRING.
 
REQUEST_FILENAME
...
The full local filesystem path to the file or script matching the request, if this has already been determined by the server at the time REQUEST_FILENAME is referenced. Otherwise, such as when used in virtual host context, the same value as REQUEST_URI.
 
HTTPS
'className' => '\\Bitrix\\Main\\DB\\MysqliConnection', # .SETTINGS.PHP
Will contain the text "on" if the connection is using SSL/TLS, or "off" otherwise. (This variable can be safely used regardless of whether or not mod_ssl is loaded).
</source>
</source>


=== PHP cli w/ params ===
=== bitrix innodb_strict_mode ===
 
по пути /bitrix/php_interface/ правим:<br>
 
* after_connect_d7.php:
<code>$connection->queryExecute("SET innodb_strict_mode=0");</code><br>
 
* after_connect.php:
<code>$DB->Query("SET innodb_strict_mode=0");</code>
 
=== bitrix запустить индекс в консоли ===
 
Добавить в начало файла
 
<code>$_SERVER["DOCUMENT_ROOT"] = __DIR__;</code>
 
=== bitrix pcre limit ===
 
<code>php_value pcre.jit 0</code>
 
=== bitrix mbstring orig pos ===
 
https://admin4web.ru/article/oshibka-mb-orig-strpos/
 
<code>php_value mbstring.func_overload 2</code>


<source>
<source>
php PATH -k parameter
[Error] Call to undefined function mb_orig_strpos() (0) /public_html/bitrix/modules/security/classes/general/post_filter.php:320 #0: CSecurityXSSDetect::fastStrpos(string, string) /public_html/bitrix/modules/security/classes/general/post_filter.php:190 #1: CSecurityXSSDetect->findInArray(string, array) /public_html/bitrix/modules/security/classes/general/post_filter.php:221 #2: CSecurityXSSDetect->isDangerBody(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:237 #3: CSecurityXSSDetect->getFilteredScriptBody(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:262 #4: CSecurityXSSDetect->getFilteredScript(array) #5: preg_replace_callback(string, array, string) /public_html/bitrix/modules/security/classes/general/post_filter.php:274 #6: CSecurityXSSDetect->filter(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:72 #7: CSecurityXSSDetect->process(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:55 #8: CSecurityXSSDetect::OnEndBufferContent(string) /public_html/bitrix/modules/main/classes/general/module.php:490 #9: ExecuteModuleEventEx(array, array) /public_html/bitrix/modules/main/classes/general/main.php:3192 #10: CAllMain->EndBufferContent(string) /public_html/bitrix/modules/main/classes/general/main.php:3140 #11: CAllMain->EndBufferContentMan() /public_html/bitrix/modules/main/include/epilog_after.php:36 #12: require(string) /public_html/index.php:1
 
</source>
</source>


=== htaccess regular rewrites ===
[[htaccess rewrites]]


=== 4XX Mail Timeout Greylisting ===
=== htaccess нет редиректу на слеш ===


https://wolandblog.com/850-filtruem-spam-pravilno-s-primerami-dlya-postfix/#greylist
<code>DirectorySlash Off</code>


<blockquote>
=== htaccess remove slashes ===
Серый список. Работа грейлистинга основывается на том, что поведение клиентов рассылающих спам отличается от поведения честных почтовых серверов. В ходе SMTP сессии грейлист отдает клиенту ошибку с кодом (4xx), который означает “временная ошибка, попробуйте повторить позже”. Честный почтовый сервер через время обязательно предпримет попытку повторной доставки, поскольку умеет держать очередь почтовых сообщений. Спамеры же в свою очередь очередей не держат, это продиктовано огромными объемами рассылок
</blockquote>


=== Перенос сайтов на Python ===
<source>
RewriteCond %{THE_REQUEST} ([^\s]*)\/{2,}(\?[^\s]*)?
RewriteRule (.*) %1 [R=301,L]
</source>


http://simp.ly/p/FgKNHq
https://qna.habr.com/q/232562


full - https://app.simplenote.com/p/FgKNHq
=== htaccess remove index.html index.php ===


== Defaults ==
https://www.reg.ru/support/hosting-i-servery/file-htaccess/kak-ubratu-index-html-iz-url


=== .htaccess Wordpress ===
=== htaccess убрать .php ===


<source>
<source>
# BEGIN WordPress
#редирект с php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]


RewriteEngine On
#remove php
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
</source>
RewriteRule . /index.php [L]


# END WordPress
=== редиректы в .htaccess ===
 
https://web-optimizator.com/301-redirekt-htaccess/
 
=== sed s!!! ===
 
<code>:%s!что!на-что!g</code>
 
=== vim открыть в кодировке ===
 
Кодировка открытия (сохранится в ней же): <code>:e ++enc=cp1251</code>
 
Кодировка сохранения: <code>:set fileencoding=utf-8</code>
 
Перевод строки: <code>:set fileformat=unix</code>
 
 
https://renotes.ru/post-146/vim-ecoding
 
=== vim навигация целиковая ===
 
<code>ggVG</code> - в начало, visual line, в конец
 
=== MySQL repair ===
 
<code>mysqlcheck -r -u'база_данных' -p'пароль_базы_данных' 'база_данных'</code>
 
=== MySQL get high cpu (L2) ===
 
https://www.percona.com/blog/2020/04/23/a-simple-approach-to-troubleshooting-high-cpu-in-mysql/
 
=== MySQL 5.7 -> 5.6 ===
 
При ошибке:
 
<source>
ERROR 1118 (42000) at line 458: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline
</source>
</source>


=== .htaccess OpenCart ===
Поможет смена формата столбцов на DYNAMIC:
 
<code>sed -i 's#ENGINE=InnoDB#ENGINE=InnoDB ROW_FORMAT=DYNAMIC#g' dump.sql</code>
 
=== MySQL (PHP) кодировка соединения ===
 
Полезно в случаях, когда в базе кракозябры и на сайте тоже, однако установить корректную кодировку не получается, однако работать это должно корректно. Обычно возникает после переноса сайта между хостингами/VDS. Присуще самописным сайтам/CMSкам.<br>
 
Добавить после строки, где осуществляется подключение:<br>
 
Если используется mysqli (PHP 5.6+): <code>$mysqli->set_charset("utf8")</code>
 
При использовании mysql (PHP 5.6-): <code>mysql_set_charset("utf8")</code>
 
Или: <code>mysql_query("SET NAMES 'cp1251'");</code>
 
=== Unknown collation: ‘utf8mb4_unicode_520_ci’ ===
 
<code>sed -i "s#utf8mb4_unicode_520_ci#utf8mb4_unicode_ci#g"</code>


<source>
=== рекурсивная замена в файлах for'ом sed'ом ===
# 1.To use URL Alias you need to be running apache with mod_rewrite enabled.


# 2. In your opencart directory rename htaccess.txt to .htaccess.
<code>for i in `grep -rl 'что' .`; do sed -i 's%что%на_что%g' $i; done</code>


# For any support issues please visit: http://www.opencart.com
=== remove wget listings ===


Options +FollowSymlinks
<code>find . -name '.listing' -delete</code>


# Prevent Directoy listing
=== openssl узнать сертификат ===
Options -Indexes


# Prevent Direct Access to files
<code>openssl s_client -servername lulzette.ru -connect lulzette.ru:443 2>/dev/null| openssl x509 -text</code>
<FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))">
Require all denied
## For apache 2.2 and older, replace «Require all denied» with these two lines :
# Order deny,allow
# Deny from all
</FilesMatch>


# SEO URL Settings
=== zfs quota ===
RewriteEngine On
# If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/


RewriteBase /
* Всего:
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]


### Additional Settings that may need to be enabled for some servers
<code>zfs get userquota@$USER zpool/home </code><br>
### Uncomment the commands by removing the # sign in front of it.
### If you get an «Internal Server Error 500» after enabling any of the following settings, restore the # as this means your host doesn’t allow that.


# 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
* Использовано:
# php_flag register_globals off


# 2. If your cart has magic quotes enabled, This may work to disable it:
<code>zfs get userused@$USER zpool/home</code>
# php_flag magic_quotes_gpc Off


# 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
=== tar compress ===
# php_value upload_max_filesize 999M


# 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
<code> tar -cvzf public_html.tar.gz </code>
# php_value post_max_size 999M


# 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
https://sheensay.ru/tar
# php_value max_execution_time 200


# 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
=== tar follow symlinks ===
# php_value max_input_time 200


# 7. disable open_basedir limitations
<source>
# php_admin_value open_basedir none
-h, --dereference
    don't archive symlinks; archive the files they point to
</source>
</source>


=== .htaccess Joomla ===
=== chmod find ===


<source>
<source>
##
find . -type f -exec chmod 644 {} +
# @package Joomla
# @copyright Copyright (C) 2005 - 2012 Open Source Matters. All rights reserved.
# @license GNU General Public License version 2 or later; see LICENSE.txt
##


##
find . -type d -exec chmod 755 {} +
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
</source>
#
# The line just below this section: 'Options +FollowSymLinks' may cause problems
# with some server configurations. It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file. If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url's. If they work,
# it has been set by your server administrator and you do not need it set here.
##


## Can be commented out if causes errors, see notes above.
Options +FollowSymLinks


## Mod_rewrite in use.
=== apache list config ===


RewriteEngine On
<code>sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$"</code>


## Begin - Rewrite rules to block out some common exploits.
=== ссылки (links) ===
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.


## Begin - Custom redirects
<code>ln -s *откуда* *ссылка*</code>
#
# If you need to redirect some pages, or set a canonical non-www to
# www redirect (or vice versa), place that code here. Ensure those
# redirects use the correct RewriteRule syntax and the [R=301,L] flags.
#
## End - Custom redirects


##
== links ==
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root).
##


# RewriteBase /
проксирование нгинксом, заголовки, балансировка: https://devacademy.ru/comment/5


## Begin - Joomla! core SEF Section.
apache mod_rewrite: https://httpd.apache.org/docs/2.4/rewrite/remapping.html
#
 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
nginx переменные в ngx_http_core_module: https://nginx.org/en/docs/http/ngx_http_core_module.html#var_remote_addr
#
 
# If the requested path and file is not /index.php and the request
все переменные в нгинксе: https://nginx.org/en/docs/varindex.html
# has not already been internally rewritten to the index.php script
 
RewriteCond %{REQUEST_URI} !^/index\.php
(mediawiki) nginx - location и полезности по регуляркам: https://rav.pw/nginx-location/
# and the request is for something within the component folder,
 
# or for the site root, or for an extensionless URL, or the
(mediawiki) полезности по регуляркам: https://www.karashchuk.com/Apache/htaccess_regexp/
# requested URL ends with one of the listed extensions
 
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
легко и понятно про mod_rewrite (и про регулярки): https://hackware.ru/?p=5543
# and the requested path and file doesn't directly match a physical file
 
RewriteCond %{REQUEST_FILENAME} !-f
советы по php-fpm http://pektop.net/2013/09/sovety-po-nastrojke-i-optimizacii-nginx-i-php-fpm/
# and the requested path and file doesn't directly match a physical folder
 
RewriteCond %{REQUEST_FILENAME} !-d
тоже php-fpm https://rtfm.co.ua/nginx-nastrojka-servera-i-php-fpm/
# internally rewrite the request to the index.php script
 
RewriteRule .* index.php [L]
и еще php-fpm https://hcbogdan.com/php/2016/09/16/php-fpm-dynamic/
#
 
## End - Joomla! core SEF Section.
 
</source>
https://github.com/EliverLara/Juno
 
https://it-para.site/neprinuzhdionnye-is.html
 
https://habr.com/ru/company/mailru/blog/490790/
 
 
 
https://wiki.gentoo.org/wiki/Complete_Virtual_Mail_Server/Courier-IMAP_to_Database/ru
 
https://help.ubuntu.com/community/Courier
 
https://1cloud.ru/help/linux/nastrojka-exim4
 
https://skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/
 
https://vim.rtorr.com/


mail - https://habr.com/ru/post/59417/


=== config OpenCart ===
DNS - https://habr.com/ru/post/137587/


https://nomoney.su/universalnyiy-konfig-config-php-dlya-opencart-2-x
== Docs ==


==== admin/config.php ====
=== Wordpress, главная доступна, 404 на подстраницах ===


<source>
В 99% случаев возникает из-за отсутствия стандартных директив в .htaccess сайта. Следует добавить их: [[CMS Стандартные файлы]]
<?php
$host = $_SERVER['HTTP_HOST'];
// HTTP
define('HTTP_SERVER', 'http://'.$host.'/admin/');
define('HTTP_CATALOG', 'http://'.$host.'/');


// HTTPS
=== PMA на разных хостингах ===
define('HTTPS_SERVER', 'http://'.$host.'/admin/');
define('HTTPS_CATALOG', 'http://'.$host.'/');


$dir = dirname(dirname(__FILE__));
https://snipp.ru/handbk/url-phpmyadmin


// DIR
=== PHP запустить в консоли с параметрами ===
define('DIR_APPLICATION', $dir.'/admin/');
define('DIR_SYSTEM', $dir.'/system/');
define('DIR_LANGUAGE', $dir.'/admin/language/');
define('DIR_TEMPLATE', $dir.'/admin/view/template/');
define('DIR_CONFIG', $dir.'/system/config/');
define('DIR_IMAGE', $dir.'/image/');
define('DIR_CACHE', $dir.'/system/storage/cache/');
define('DIR_DOWNLOAD', $dir.'/system/storage/download/');
define('DIR_LOGS', $dir.'/system/storage/logs/');
define('DIR_MODIFICATION', $dir.'/system/storage/modification/');
define('DIR_UPLOAD', $dir.'/system/storage/upload/');
define('DIR_CATALOG', $dir.'/catalog/');


// DB
<source>
define('DB_DRIVER', 'mysqli');
php SCRIPT.PHP -k parameter
define('DB_HOSTNAME', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '12345');
define('DB_DATABASE', 'oc21');
define('DB_PORT', '3306');
define('DB_PREFIX', 'oc_');
</source>
</source>


==== config.php ====
=== Перенос сайтов на Python ===
 
http://simp.ly/p/FgKNHq
 
full - https://app.simplenote.com/p/FgKNHq


<source>
=== mixed content easy fix ===
<?php
$host = $_SERVER['HTTP_HOST'];
// HTTP
define('HTTP_SERVER', 'http://'.$host.'/');


// HTTPS
Добавить в .htaccess:
define('HTTPS_SERVER', 'http://'.$host.'/');


$dir = dirname(__FILE__);
<code>Header always set Content-Security-Policy "upgrade-insecure-requests"</code>


// DIR
При получении браузером заголовка "Content-Security-Policy" с указанным значением браузер автоматически заменяет http на https, из-за чего Mixed пропадает. Не советую использовать (кроме случаев, когда замена в дампе базы и в файлах не помогает), так как некоторые браузеры могут не обрабатывать этот заголовок (мало ли какой тупой говнобраузер попадется).
define('DIR_APPLICATION',  $dir.'/catalog/');
define('DIR_SYSTEM',  $dir.'/system/');
define('DIR_LANGUAGE', $dir.'/catalog/language/');
define('DIR_TEMPLATE', $dir.'/catalog/view/theme/');
define('DIR_CONFIG', $dir.'/system/config/');
define('DIR_IMAGE',  $dir.'/image/');
define('DIR_CACHE',  $dir.'/system/storage/cache/');
define('DIR_DOWNLOAD',  $dir.'/system/storage/download/');
define('DIR_LOGS',  $dir.'/system/storage/logs/');
define('DIR_MODIFICATION',  $dir.'/system/storage/modification/');
define('DIR_UPLOAD',  $dir.'/system/storage/upload/');


// DB
[https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests Совместимость с браузерами и подробная информация]
define('DB_DRIVER', 'mysqli');
define('DB_HOSTNAME', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '12345');
define('DB_DATABASE', 'oc21');
define('DB_PORT', '3306');
define('DB_PREFIX', 'oc_');
</source>

Текущая версия от 12:57, 5 сентября 2022


Tools

BOMB grep

grep -I -H -l -R $'\uFEFF' .

BOMB sed

for i in `grep -H -l -R $'\uFEFF' .`; do sed -i '1s/^\xEF\xBB\xBF//' $i; done

альтернативно:

grep -rlI $'\xEF\xBB\xBF' . | xargs perl -i -pe 's{\xEF\xBB\xBF}{}'

мой варик:

grep -H -l -R $'\uFEFF' | xargs sed -i '1s/^\xEF\xBB\xBF//'
(должно сработать)

SQL alter/convert

  • таблицу и поля в кодировки

ALTER TABLE `DATABASE`.`TABLE` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

  • базу, таблицы, поля в кодировки

ALTER DATABASE `DATABASE` DEFAULT CHARSET=utf8 COLLATE utf8_bin;

https://stackoverflow.com/questions/6115612/how-to-convert-an-entire-mysql-database-characterset-and-collation-to-utf-8#6115705

Use the ALTER DATABASE and ALTER TABLE commands.

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Or if you're still on MySQL 5.5.2 or older which didn't support 4-byte UTF-8, use utf8 instead of utf8mb4:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

wp-cli

full list: https://wp-kama.ru/handbook/cli/wp

Проверить версию wp:
wp core version

Инормация по wp-cli:
wp --info

Экспортировать базу:
wp db export databasename


Импортировать базу:
wp db import databasename

Заменить в базе все value1 на value2:
wp search-replace value1 value2

Обновить кэш:
wp cache flush

Получить информацию по опциям из таблицы wp_options базы данных:
wp option get home
wp option get siteurl

UTF-8 в нечитабельном виде

Юзаем питон:
python -c "print(b'кракозябры'.decode('utf-8'))"

Пример:
python -c "print(b'\xd0\xb2\xd1\x8b\xd0\xbf\xd0\xbe\xd0\xbb\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb9 '.decode('utf-8'))"

u**** - unicode_escape

python -c "print(b'\u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0447\u0442\u044b \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439'.decode('unicode_escape'))"
На сайте возникла критическая ошибка. Пожалуйста, проверьте входящие сообщения почты администратора для дальнейших инструкций

logs nginx speed + logs smtp

awk '{print $1, $2, $3, $15, $13}' - время ответа (nginx)
awk '{print $1, $2, $3, $16, $13}' - код ответа http (для апача $16 -> $15)
awk '{print $1, $2, $3, $16, $15, $13}' - код + время

  • Получить логи исходящих от ящика (смотрит по ID письма):

logs s DATE | egrep $(logs s DATE | egrep FROM | grep '<=' | awk '{print $8, $14, $15}' | awk '{print $1}' | sort | uniq | tr '\n' '|' | rev | cut -c 2- | rev)

либо

for i in `logs s | grep '<=' | grep '@timeweb.ru' |awk '{print $8}'` ; do logs s | grep $i ; done

  • Получить логи входящих по ящику:

logs x DATE | egrep $(logs x DATE | egrep FROM | grep '=>' | awk '{print $8, $14, $15}' | awk '{print $1}' | sort | uniq | tr '\n' '|' | rev | cut -c 2- | rev)

проверить что апач пытается спавнить процессы на 2й схеме (недостаточно обработчиков)

logs e *servername* | grep etc/apache2/config

awk more than

awk '{if ($1 > 300) print $1, $2;}'

grep рекурсивно файлы

grep -H -l -R "pattern" .

игнорировать бинарные файлы, только текстовые - -I

SQL дубликаты в таблице

SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1;

замена домена через SQL запросы, Wordpress

ГОТОВЫЕ ЗАПРОСЫ ДЛЯ ЗАМЕНЫ ДОМЕНА: https://rudrastyh.com/sql-queries-to-change-wordpress-website-domain

https://misha.blog/wordpress/sql-queries-domain.html

UPDATE wp_posts SET post_content = REPLACE (post_content, 'OLD', 'NEW');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'OLD', 'NEW');

Если есть wp-cli, то все в разы проще + по всем таблицам:

wp db export && wp search-replace "OLD" "NEW"

PHP Mail

<?
var_dump(mail("test@test.ru", "test", "test"));
?>

Python update virtualenv 16.x -> 20.x

*install as usual*
*activate*
python3 -m pip install virtualenv
python -m virtualenv --version

Mass dig [BASH]

function massHosts() {
        for i in $@ ; do
                echo '--'
                echo $i;
                dig a +short $i
                #echo '=='
        done

}

bitrix in cp1251

php_value default_charset "cp1251"
php_value mbstring.internal_encoding cp1251
php_value mbstring.func_overload 2

bitrix размер стека и pcre.recursion_limit

Для этого добавил в файл .htaccess в корневой директории вашего аккаунта следующие директивы:
php_value pcre.jit 0
php_value pcre.recursion_limit 100000 - удалил

bitrix mysqli

define("BX_USE_MYSQLI", true); # DBCONN.PHP

...

'className' => '\\Bitrix\\Main\\DB\\MysqliConnection', # .SETTINGS.PHP

bitrix innodb_strict_mode

по пути /bitrix/php_interface/ правим:

  • after_connect_d7.php:

$connection->queryExecute("SET innodb_strict_mode=0");

  • after_connect.php:

$DB->Query("SET innodb_strict_mode=0");

bitrix запустить индекс в консоли

Добавить в начало файла

$_SERVER["DOCUMENT_ROOT"] = __DIR__;

bitrix pcre limit

php_value pcre.jit 0

bitrix mbstring orig pos

https://admin4web.ru/article/oshibka-mb-orig-strpos/

php_value mbstring.func_overload 2

[Error] Call to undefined function mb_orig_strpos() (0) /public_html/bitrix/modules/security/classes/general/post_filter.php:320 #0: CSecurityXSSDetect::fastStrpos(string, string) /public_html/bitrix/modules/security/classes/general/post_filter.php:190 #1: CSecurityXSSDetect->findInArray(string, array) /public_html/bitrix/modules/security/classes/general/post_filter.php:221 #2: CSecurityXSSDetect->isDangerBody(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:237 #3: CSecurityXSSDetect->getFilteredScriptBody(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:262 #4: CSecurityXSSDetect->getFilteredScript(array) #5: preg_replace_callback(string, array, string) /public_html/bitrix/modules/security/classes/general/post_filter.php:274 #6: CSecurityXSSDetect->filter(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:72 #7: CSecurityXSSDetect->process(string) /public_html/bitrix/modules/security/classes/general/post_filter.php:55 #8: CSecurityXSSDetect::OnEndBufferContent(string) /public_html/bitrix/modules/main/classes/general/module.php:490 #9: ExecuteModuleEventEx(array, array) /public_html/bitrix/modules/main/classes/general/main.php:3192 #10: CAllMain->EndBufferContent(string) /public_html/bitrix/modules/main/classes/general/main.php:3140 #11: CAllMain->EndBufferContentMan() /public_html/bitrix/modules/main/include/epilog_after.php:36 #12: require(string) /public_html/index.php:1

htaccess regular rewrites

htaccess rewrites

htaccess нет редиректу на слеш

DirectorySlash Off

htaccess remove slashes

RewriteCond %{THE_REQUEST} ([^\s]*)\/{2,}(\?[^\s]*)?
RewriteRule (.*) %1 [R=301,L]

https://qna.habr.com/q/232562

htaccess remove index.html index.php

https://www.reg.ru/support/hosting-i-servery/file-htaccess/kak-ubratu-index-html-iz-url

htaccess убрать .php

#редирект с php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]

#remove php
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [NC,L]

редиректы в .htaccess

https://web-optimizator.com/301-redirekt-htaccess/

sed s!!!

:%s!что!на-что!g

vim открыть в кодировке

Кодировка открытия (сохранится в ней же): :e ++enc=cp1251

Кодировка сохранения: :set fileencoding=utf-8

Перевод строки: :set fileformat=unix


https://renotes.ru/post-146/vim-ecoding

vim навигация целиковая

ggVG - в начало, visual line, в конец

MySQL repair

mysqlcheck -r -u'база_данных' -p'пароль_базы_данных' 'база_данных'

MySQL get high cpu (L2)

https://www.percona.com/blog/2020/04/23/a-simple-approach-to-troubleshooting-high-cpu-in-mysql/

MySQL 5.7 -> 5.6

При ошибке:

ERROR 1118 (42000) at line 458: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline

Поможет смена формата столбцов на DYNAMIC:

sed -i 's#ENGINE=InnoDB#ENGINE=InnoDB ROW_FORMAT=DYNAMIC#g' dump.sql

MySQL (PHP) кодировка соединения

Полезно в случаях, когда в базе кракозябры и на сайте тоже, однако установить корректную кодировку не получается, однако работать это должно корректно. Обычно возникает после переноса сайта между хостингами/VDS. Присуще самописным сайтам/CMSкам.

Добавить после строки, где осуществляется подключение:

Если используется mysqli (PHP 5.6+): $mysqli->set_charset("utf8")

При использовании mysql (PHP 5.6-): mysql_set_charset("utf8")

Или: mysql_query("SET NAMES 'cp1251'");

Unknown collation: ‘utf8mb4_unicode_520_ci’

sed -i "s#utf8mb4_unicode_520_ci#utf8mb4_unicode_ci#g"

рекурсивная замена в файлах for'ом sed'ом

for i in `grep -rl 'что' .`; do sed -i 's%что%на_что%g' $i; done

remove wget listings

find . -name '.listing' -delete

openssl узнать сертификат

openssl s_client -servername lulzette.ru -connect lulzette.ru:443 2>/dev/null| openssl x509 -text

zfs quota

  • Всего:

zfs get userquota@$USER zpool/home

  • Использовано:

zfs get userused@$USER zpool/home

tar compress

tar -cvzf public_html.tar.gz

https://sheensay.ru/tar

tar follow symlinks

-h, --dereference
    don't archive symlinks; archive the files they point to

chmod find

find . -type f -exec chmod 644 {} +

find . -type d -exec chmod 755 {} +


apache list config

sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$"

ссылки (links)

ln -s *откуда* *ссылка*

links

проксирование нгинксом, заголовки, балансировка: https://devacademy.ru/comment/5

apache mod_rewrite: https://httpd.apache.org/docs/2.4/rewrite/remapping.html

nginx переменные в ngx_http_core_module: https://nginx.org/en/docs/http/ngx_http_core_module.html#var_remote_addr

все переменные в нгинксе: https://nginx.org/en/docs/varindex.html

(mediawiki) nginx - location и полезности по регуляркам: https://rav.pw/nginx-location/

(mediawiki) полезности по регуляркам: https://www.karashchuk.com/Apache/htaccess_regexp/

легко и понятно про mod_rewrite (и про регулярки): https://hackware.ru/?p=5543

советы по php-fpm http://pektop.net/2013/09/sovety-po-nastrojke-i-optimizacii-nginx-i-php-fpm/

тоже php-fpm https://rtfm.co.ua/nginx-nastrojka-servera-i-php-fpm/

и еще php-fpm https://hcbogdan.com/php/2016/09/16/php-fpm-dynamic/


https://github.com/EliverLara/Juno

https://it-para.site/neprinuzhdionnye-is.html

https://habr.com/ru/company/mailru/blog/490790/


https://wiki.gentoo.org/wiki/Complete_Virtual_Mail_Server/Courier-IMAP_to_Database/ru

https://help.ubuntu.com/community/Courier

https://1cloud.ru/help/linux/nastrojka-exim4

https://skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/

https://vim.rtorr.com/

mail - https://habr.com/ru/post/59417/

DNS - https://habr.com/ru/post/137587/

Docs

Wordpress, главная доступна, 404 на подстраницах

В 99% случаев возникает из-за отсутствия стандартных директив в .htaccess сайта. Следует добавить их: CMS Стандартные файлы

PMA на разных хостингах

https://snipp.ru/handbk/url-phpmyadmin

PHP запустить в консоли с параметрами

php SCRIPT.PHP -k parameter

Перенос сайтов на Python

http://simp.ly/p/FgKNHq

full - https://app.simplenote.com/p/FgKNHq

mixed content easy fix

Добавить в .htaccess:

Header always set Content-Security-Policy "upgrade-insecure-requests"

При получении браузером заголовка "Content-Security-Policy" с указанным значением браузер автоматически заменяет http на https, из-за чего Mixed пропадает. Не советую использовать (кроме случаев, когда замена в дампе базы и в файлах не помогает), так как некоторые браузеры могут не обрабатывать этот заголовок (мало ли какой тупой говнобраузер попадется).

Совместимость с браузерами и подробная информация