#.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