http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html
Сначала последовательно выполняются rewrite, описанные на уровне server.
Только потом уже начинается поиск location по URI запроса и последовательно выполняются директивы описанные в найденном location.
server { rewrite "^/([^.]+)(/?)+$" /index.php?do=cat&category=$1 last; location /user/ { rewrite ^/user/([^/]*)(/?)+$ /index.php?subaction=userinfo&user=$1 last; } }
В строке /user/johnylee/ нет точек, поэтому она совпадает с шаблоном "^/([^.]+)(/?)+$".
Т.е. этот шаблон перехватит любой запрос, где нет точек.
Самое простое решение это вынести все правила с rewrite на уровень server.
rewrite "^/([^.]+)/page/([0-9]+)(/?)+$" /index.php?do=cat&category=$1&cstart=$2 last; rewrite "^/([^.]+)(/?)+$" /index.php?do=cat&category=$1 last;
Эти два правила перенести в самый конец.
Или rewrite c уровеня server перенести в location /
location / { rewrite "^/xfsearch/([^.]*)(/?)+$" /index.php?do=xfsearch&xf=$1 last; rewrite "^/xfsearch/([^.]*)/page/([0-9]+)(/?)+$" /index.php?do=xfsearch&xf=$1&cstart=$2 last; rewrite "^/page/([0-9]+)(/?)$" /index.php?cstart=$1 last; rewrite ^/page/(.*)$ /index.php?cstart=$1 last; rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2&day=$3 last; rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&day=$3&cstart=$4 last; rewrite "^/([0-9]{4})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2 last; rewrite "^/([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&cstart=$3 last; rewrite "^/([0-9]{4})(/?)+$" /index.php?year=$1 last; rewrite "^/([0-9]{4})/page/([0-9]+)(/?)+$" /index.php?year=$1&cstart=$2 last; rewrite "^/([^.]+)/page/([0-9]+)(/?)+$" /index.php?do=cat&category=$1&cstart=$2 last; rewrite "^/([^.]+)(/?)+$" /index.php?do=cat&category=$1 last;
И несколько правил для .xml перенести в location ~ \.(html|xml)
rewrite ^/user/([^/]*)/rss.xml$ /engine/rss.php?subaction=allnews&user=$1 last; rewrite ^/user/([^/]*)/news/rss.xml(/?)+$ /engine/rss.php?subaction=allnews&user=$1 last; rewrite ^/catalog/([^/]*)/rss.xml$ /engine/rss.php?catalog=$1 last;
RewriteRule ^cats(.*)$ https://site.ru/catalog$1 [L,R=301]
Headlesz, в правилах для замены CATS и удаления .html нужно указать полный адрес c https://domain и поставить их над правилом для редиректа на https.
RewriteRule "^(search/.*?) (.*)" /$1-$2 [R=301,L]
Order Allow,Deny Allow from all # Deny from x.x.x.0/x Deny from x.x.x.0/x --//--
Можно добавить SetEnvIf и поменять порядок в Order.
SetEnvIf Request_URI ^/page1$ allow_page=1 Order Deny,Allow Allow from env=allow_page Allow from env=redirect_status Deny from x.x.x.0/x Deny from x.x.x.0/x
Order deny,allow deny from all Allow from 227.123.80.0/24
Там же ещё код ответа нужно сменить с 403 на 404.
Файл /admin/.htaccess
ErrorDocument 403 /404.php Order deny,allow Deny from all Allow from 227.123.80.0/24
Файл /404.php
<?php http_response_code(404);
Вариант с mod_rewrite
/admin/.htaccess
ErrorDocument 403 /404.php DirectorySlash off RewriteEngine on RewriteCond %{REMOTE_ADDR} <227.123.80.5 [OR] RewriteCond %{REMOTE_ADDR} >227.123.80.227 RewriteRule ^ - [F]
Все нормально. Можно даже не R=permanent, а redirect=permanent - это всё синонимы R=301.
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^/?(.*) https://%1/$1 [L,redirect=permanent]
^/? обеспечивает одинаковую работу в контексте VirtualHost и .htaccess.
В контексте VirtualHost строка с которой работает RewriteRule всегда начинается с "/", а в .htaccess всё наоборот.
Там нужно не кавычки, а обратные апострофы
var=`/etc/init.d/nginx reload`;
Просто удалить \r
tr -d '\r' < blockip.sh > blockip_fix.sh
В Window конец строки это последовательность из двух символов \r\n, а в Unix конец строки только один символ \n.