Необязательный символ в конце Regexp (.htaccess)
Я хочу добиться, чтобы одним выражением RewriteRule происходил редирект по двум условиям.
Если http, или в конце есть /
RewriteCond %{HTTPS} off [OR]
RewriteCond %{REQUEST_URI} ^(.*)/$
RewriteRule ^(.*)/?$ https://%{HTTP_HOST}/$1 [L,R=301]
Но конструкция ^(.*)/?$
вносит конечный слэш в группу $1. Как его отделить?
UP:
Хорошим бы вариантом было бы нечто подобное:
(?<path>(?<part>\/[^\/]+)+)
Тут первая группа, может несколько раз повторятся по шаблону \/[^\/]+
Ну и группа path собирает это всё в именованную группу, котрую затем можно было бы подставить. пример на regex101
Но как это осуществить в .htaccess непонятно, он не понимает повторение группы.
Ответы (1 шт):
может неактуально уже, но все же
потому что группа (.*) жадная и она заберет к себе закрывающий слеш если надо исключить его из группы, то необходимо так и указывать
RewriteRule ^([^/])/?$ https://%{HTTP_HOST}/$1 [L,R=301]
PS это конечно под конкретный пример. То есть для http://a.com/yyy/zzz/ уже не сработает