Необязательный символ в конце Regexp (.htaccess)

Я хочу добиться, чтобы одним выражением RewriteRule происходил редирект по двум условиям.

Если http, или в конце есть /

RewriteCond %{HTTPS} off [OR]
RewriteCond %{REQUEST_URI} ^(.*)/$
RewriteRule ^(.*)/?$ https://%{HTTP_HOST}/$1 [L,R=301]

Но конструкция ^(.*)/?$ вносит конечный слэш в группу $1. Как его отделить?

пример в тестере .htaccess

UP:

Хорошим бы вариантом было бы нечто подобное:

(?<path>(?<part>\/[^\/]+)+)

Тут первая группа, может несколько раз повторятся по шаблону \/[^\/]+

Ну и группа path собирает это всё в именованную группу, котрую затем можно было бы подставить. пример на regex101

Но как это осуществить в .htaccess непонятно, он не понимает повторение группы.


Ответы (1 шт):

Автор решения: Yuriy Belalov

может неактуально уже, но все же

потому что группа (.*) жадная и она заберет к себе закрывающий слеш если надо исключить его из группы, то необходимо так и указывать

RewriteRule ^([^/])/?$ https://%{HTTP_HOST}/$1 [L,R=301]

PS это конечно под конкретный пример. То есть для http://a.com/yyy/zzz/ уже не сработает

→ Ссылка