Первый переписчик будет пропущен, если у меня будет второй?

#.htaccess #mod-rewrite

Вопрос:

Я схожу с ума от этого .htaccess:

Я сделал это (и протестировал это здесь https://htaccess.madewithlove.be/):

 RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}/BBB

RewriteRule ^REMOVE(/.*)?$ https://%{HTTP_HOST}$1/CCC [L]
 

Первое правило должно быть изменено http:// https:// и добавлено /BBB (что работает само по себе). Второе правило следует удалить /REMOVE и добавить /CCC .

Я даю ему URL-адрес http://test-domain.com/REMOVE/AAA

Я ожидаю, что результат будет https://test-domain.com/AAA/BBB/CCC

Но вместо этого это просто https://test-domain.com/AAA/CCC

Как будто была пропущена первая перезапись или как если бы второе правило совпадало со старым URL-адресом, а не с тем, которое вытекает из первого правила. Чего мне не хватает?

Спасибо за вашу помощь!

Комментарии:

1. Ваши ожидания неверны, и в этом вся проблема . Ваше первое правило перенаправляет. Потому что целью является полный URL-адрес. Это означает, что браузер перенаправляется на точный указанный вами URL-адрес. Это второе правило будет применяться для https-запросов, но только в том случае, если этот запрос содержит путь, начинающийся с «УДАЛИТЬ». Чего не делает перенаправленный URL-адрес.

2. После первого правила я должен остаться с test-domain.com/REMOVE/AAA/BBB разве я не должен? Таким образом, у меня все равно останется «УДАЛИТЬ» для применения второго правила? Согласно тому, что вы говорите, мое 2-е правило будет пропущено, но здесь происходит обратное, это мое первое правило, которое пропускается.

3. Нет, неправильно. 1. откуда должно взяться это «ААА»? И 2. /BBB это, безусловно, не соответствует шаблону ^REMOVE .

4. Это AAA происходит с проверенного URL-адреса: http://test-domain.com/REMOVE/AAA . /BBB соответствует не ^REMOVE , а второй половине регулярного выражения: (/.*)? которое вы здесь опустили (полное регулярное ^REMOVE(/.*)?$ выражение ). Как уже упоминалось, я уже проверил, что два правила РАБОТАЮТ по назначению отдельно, только когда они соединены вместе, они не связаны так, как я ожидаю.

5. Я не понимаю, как /BBB в конце https://%{HTTP_HOST}%{REQUEST_URI}/BBB добавляется в конец URL-адреса? Особенно когда я специально сказал, что я это проверил, и это так?? Это AAA захватывается %{REQUEST_URI} частью. REMOVE находится в начале совпадающей строки, перезапись соответствует URI, а не всему URL-адресу. Мне кажется, что я повторяюсь, но я проверил каждое правило по отдельности, одно только первое приводит к https://test-domain.com/REMOVE/AAA/BBB , а второе само по себе приводит к https://test-domain.com/AAA/CCC