RewriteCond %{REQUEST_FILENAME} !-f
# это не файл
RewriteCond %{REQUEST_FILENAME} !-d
# и это не директория
RewriteCond %{REQUEST_URI} ^(.+/).+$
# и если не менее 1 символа до слеша
RewriteRule ^(.*)$ http://site.ru/%1 [L,QSA]
# то перенаправить все запросы на то что в скобках в реврайт конде
php -m | grep mbstring
location /phpmyadmin {
root /var/www/apps/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
root /var/www/apps/phpmyadmin/;
proxy_pass $scheme://localhost:82;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
location /phpMyAdmin {
rewrite ^/* /phpmyadmin last;
}
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
То есть этот символ используется самим регулярным выражением.
И для того чтоб его отобразить как просто символ
его нужно экранировать
\ указывает что ближайший символ должен воспроизвестить как просо символ и игнорироват его значение.
В таком случае символ % - будет использоват не как переменная а как просто символ.
Так же я вам заменил квери стринг на и или, в таком случае при возникновение других гетов, редирект сработает.
Так же не забываете если у вас был-бы гет запрос не shop а
id=shop
то гет запрос все выражение от вопроса
%{QUERY_STRING} (^|&)lid\=shop($|&)
кстати в этом примере уже экранирован символ =
но последнего небыло в тз так что это уже для общего понимания.